}
}
+ // When used instead of UriKind.RelativeOrAbsolute paths such as "/foo" are assumed relative.
+ const UriKind DotNetRelativeOrAbsolute = (UriKind) 300;
+
public Uri (string uriString, UriKind uriKind)
{
source = uriString;
+
+ if (uriString != null && uriKind == DotNetRelativeOrAbsolute)
+ uriKind = (uriString.StartsWith ("/", StringComparison.Ordinal))? UriKind.Relative : UriKind.RelativeOrAbsolute;
+
ParseUri (uriKind);
switch (uriKind) {
return;
}
+ if (uriKind == DotNetRelativeOrAbsolute)
+ uriKind = (uriString.StartsWith ("/", StringComparison.Ordinal))? UriKind.Relative : UriKind.RelativeOrAbsolute;
+
if (uriKind != UriKind.RelativeOrAbsolute &&
uriKind != UriKind.Absolute &&
uriKind != UriKind.Relative) {
Assert.AreEqual ("id=1%262&sort=asc", escaped, "UriEscaped");
}
+ // When used, paths such as "/foo" are assumed relative.
+ static UriKind DotNetRelativeOrAbsolute = (Type.GetType ("Mono.Runtime") == null)? UriKind.RelativeOrAbsolute : (UriKind) 300;
+
+ [Test]
+ public void DotNetRelativeOrAbsoluteTest ()
+ {
+ var uri1 = new Uri ("/foo", DotNetRelativeOrAbsolute);
+ Assert.IsFalse (uri1.IsAbsoluteUri);
+
+ Uri uri2;
+ Uri.TryCreate("/foo", DotNetRelativeOrAbsolute, out uri2);
+ Assert.IsFalse (uri2.IsAbsoluteUri);
+ }
+
[Test]
// Bug #12631
public void LocalPathWithBaseUrl ()