11 private enum UriQuirksVersion
17 private class BuiltInUriParser :
UriParser 19 internal BuiltInUriParser(
string lwrCaseScheme,
int defaultPort, UriSyntaxFlags syntaxFlags)
20 : base(syntaxFlags | UriSyntaxFlags.SimpleUserSyntax | UriSyntaxFlags.BuiltInSyntax)
22 m_Scheme = lwrCaseScheme;
27 private const UriSyntaxFlags SchemeOnlyFlags = UriSyntaxFlags.MayHavePath;
33 private UriSyntaxFlags m_Flags;
35 private volatile UriSyntaxFlags m_UpdatableFlags;
37 private volatile bool m_UpdatableFlagsUsed;
39 private const UriSyntaxFlags c_UpdatableFlags = UriSyntaxFlags.UnEscapeDotsAndSlashes;
43 private string m_Scheme;
45 internal const int NoDefaultPort = -1;
47 private const int c_InitialTableSize = 25;
81 private static readonly UriQuirksVersion s_QuirksVersion;
83 private const int c_MaxCapacity = 512;
85 private const UriSyntaxFlags UnknownV1SyntaxFlags = UriSyntaxFlags.OptionalAuthority | UriSyntaxFlags.MayHaveUserInfo | UriSyntaxFlags.MayHavePort | UriSyntaxFlags.MayHavePath | UriSyntaxFlags.MayHaveQuery | UriSyntaxFlags.MayHaveFragment | UriSyntaxFlags.AllowEmptyHost | UriSyntaxFlags.AllowUncHost | UriSyntaxFlags.AllowDnsHost | UriSyntaxFlags.AllowIPv4Host | UriSyntaxFlags.AllowIPv6Host | UriSyntaxFlags.V1_UnknownUri | UriSyntaxFlags.AllowDOSPath | UriSyntaxFlags.PathIsRooted | UriSyntaxFlags.ConvertPathSlashes | UriSyntaxFlags.CompressPath | UriSyntaxFlags.AllowIdn | UriSyntaxFlags.AllowIriParsing;
87 private static readonly UriSyntaxFlags HttpSyntaxFlags;
89 private const UriSyntaxFlags FtpSyntaxFlags = UriSyntaxFlags.MustHaveAuthority | UriSyntaxFlags.MayHaveUserInfo | UriSyntaxFlags.MayHavePort | UriSyntaxFlags.MayHavePath | UriSyntaxFlags.MayHaveFragment | UriSyntaxFlags.AllowUncHost | UriSyntaxFlags.AllowDnsHost | UriSyntaxFlags.AllowIPv4Host | UriSyntaxFlags.AllowIPv6Host | UriSyntaxFlags.PathIsRooted | UriSyntaxFlags.ConvertPathSlashes | UriSyntaxFlags.CompressPath | UriSyntaxFlags.CanonicalizeAsFilePath | UriSyntaxFlags.AllowIdn | UriSyntaxFlags.AllowIriParsing;
91 private static readonly UriSyntaxFlags FileSyntaxFlags;
93 private const UriSyntaxFlags VsmacrosSyntaxFlags = UriSyntaxFlags.MustHaveAuthority | UriSyntaxFlags.MayHavePath | UriSyntaxFlags.MayHaveFragment | UriSyntaxFlags.AllowEmptyHost | UriSyntaxFlags.AllowUncHost | UriSyntaxFlags.AllowDnsHost | UriSyntaxFlags.AllowIPv4Host | UriSyntaxFlags.AllowIPv6Host | UriSyntaxFlags.FileLikeUri | UriSyntaxFlags.AllowDOSPath | UriSyntaxFlags.ConvertPathSlashes | UriSyntaxFlags.CompressPath | UriSyntaxFlags.CanonicalizeAsFilePath | UriSyntaxFlags.UnEscapeDotsAndSlashes | UriSyntaxFlags.AllowIdn | UriSyntaxFlags.AllowIriParsing;
95 private const UriSyntaxFlags GopherSyntaxFlags = UriSyntaxFlags.MustHaveAuthority | UriSyntaxFlags.MayHaveUserInfo | UriSyntaxFlags.MayHavePort | UriSyntaxFlags.MayHavePath | UriSyntaxFlags.MayHaveFragment | UriSyntaxFlags.AllowUncHost | UriSyntaxFlags.AllowDnsHost | UriSyntaxFlags.AllowIPv4Host | UriSyntaxFlags.AllowIPv6Host | UriSyntaxFlags.PathIsRooted | UriSyntaxFlags.AllowIdn | UriSyntaxFlags.AllowIriParsing;
97 private const UriSyntaxFlags NewsSyntaxFlags = UriSyntaxFlags.MayHavePath | UriSyntaxFlags.MayHaveFragment | UriSyntaxFlags.AllowIriParsing;
99 private const UriSyntaxFlags NntpSyntaxFlags = UriSyntaxFlags.MustHaveAuthority | UriSyntaxFlags.MayHaveUserInfo | UriSyntaxFlags.MayHavePort | UriSyntaxFlags.MayHavePath | UriSyntaxFlags.MayHaveFragment | UriSyntaxFlags.AllowUncHost | UriSyntaxFlags.AllowDnsHost | UriSyntaxFlags.AllowIPv4Host | UriSyntaxFlags.AllowIPv6Host | UriSyntaxFlags.PathIsRooted | UriSyntaxFlags.AllowIdn | UriSyntaxFlags.AllowIriParsing;
101 private const UriSyntaxFlags TelnetSyntaxFlags = UriSyntaxFlags.MustHaveAuthority | UriSyntaxFlags.MayHaveUserInfo | UriSyntaxFlags.MayHavePort | UriSyntaxFlags.MayHavePath | UriSyntaxFlags.MayHaveFragment | UriSyntaxFlags.AllowUncHost | UriSyntaxFlags.AllowDnsHost | UriSyntaxFlags.AllowIPv4Host | UriSyntaxFlags.AllowIPv6Host | UriSyntaxFlags.PathIsRooted | UriSyntaxFlags.AllowIdn | UriSyntaxFlags.AllowIriParsing;
103 private const UriSyntaxFlags LdapSyntaxFlags = UriSyntaxFlags.MustHaveAuthority | UriSyntaxFlags.MayHaveUserInfo | UriSyntaxFlags.MayHavePort | UriSyntaxFlags.MayHavePath | UriSyntaxFlags.MayHaveQuery | UriSyntaxFlags.MayHaveFragment | UriSyntaxFlags.AllowEmptyHost | UriSyntaxFlags.AllowUncHost | UriSyntaxFlags.AllowDnsHost | UriSyntaxFlags.AllowIPv4Host | UriSyntaxFlags.AllowIPv6Host | UriSyntaxFlags.PathIsRooted | UriSyntaxFlags.AllowIdn | UriSyntaxFlags.AllowIriParsing;
105 private const UriSyntaxFlags MailtoSyntaxFlags = UriSyntaxFlags.MayHaveUserInfo | UriSyntaxFlags.MayHavePort | UriSyntaxFlags.MayHavePath | UriSyntaxFlags.MayHaveQuery | UriSyntaxFlags.MayHaveFragment | UriSyntaxFlags.AllowEmptyHost | UriSyntaxFlags.AllowUncHost | UriSyntaxFlags.AllowDnsHost | UriSyntaxFlags.AllowIPv4Host | UriSyntaxFlags.AllowIPv6Host | UriSyntaxFlags.MailToLikeUri | UriSyntaxFlags.AllowIdn | UriSyntaxFlags.AllowIriParsing;
107 private const UriSyntaxFlags NetPipeSyntaxFlags = UriSyntaxFlags.MustHaveAuthority | UriSyntaxFlags.MayHavePath | UriSyntaxFlags.MayHaveQuery | UriSyntaxFlags.MayHaveFragment | UriSyntaxFlags.AllowDnsHost | UriSyntaxFlags.AllowIPv4Host | UriSyntaxFlags.AllowIPv6Host | UriSyntaxFlags.PathIsRooted | UriSyntaxFlags.ConvertPathSlashes | UriSyntaxFlags.CompressPath | UriSyntaxFlags.CanonicalizeAsFilePath | UriSyntaxFlags.UnEscapeDotsAndSlashes | UriSyntaxFlags.AllowIdn | UriSyntaxFlags.AllowIriParsing;
109 private const UriSyntaxFlags NetTcpSyntaxFlags = UriSyntaxFlags.MustHaveAuthority | UriSyntaxFlags.MayHavePort | UriSyntaxFlags.MayHavePath | UriSyntaxFlags.MayHaveQuery | UriSyntaxFlags.MayHaveFragment | UriSyntaxFlags.AllowDnsHost | UriSyntaxFlags.AllowIPv4Host | UriSyntaxFlags.AllowIPv6Host | UriSyntaxFlags.PathIsRooted | UriSyntaxFlags.ConvertPathSlashes | UriSyntaxFlags.CompressPath | UriSyntaxFlags.CanonicalizeAsFilePath | UriSyntaxFlags.UnEscapeDotsAndSlashes | UriSyntaxFlags.AllowIdn | UriSyntaxFlags.AllowIriParsing;
111 internal string SchemeName => m_Scheme;
113 internal int DefaultPort => m_Port;
115 internal static bool ShouldUseLegacyV2Quirks => s_QuirksVersion <= UriQuirksVersion.V2;
117 internal UriSyntaxFlags Flags => m_Flags;
119 internal bool IsSimple => InFact(UriSyntaxFlags.SimpleUserSyntax);
123 : this(UriSyntaxFlags.MayHavePath)
137 protected virtual void OnRegister(
string schemeName,
int defaultPort)
146 parsingError = uri.ParseMinimal();
159 if (baseUri.UserDrivenParsing)
167 string newUriString =
null;
168 bool userEscaped =
false;
169 Uri uri =
Uri.ResolveHelper(baseUri, relativeUri, ref newUriString, ref userEscaped, out parsingError);
170 if (parsingError !=
null)
188 return baseUri.IsBaseOfHelper(relativeUri);
212 if (uri.UserDrivenParsing)
220 return uri.GetComponentsHelper(components, format);
229 return uri.InternalIsWellFormedOriginalString();
244 ExceptionHelper.InfrastructurePermission.Demand();
245 if (uriParser ==
null)
249 if (schemeName ==
null)
253 if (schemeName.Length == 1)
261 if ((defaultPort >= 65535 || defaultPort < 0) && defaultPort != -1)
266 FetchSyntax(uriParser, schemeName, defaultPort);
277 if (schemeName ==
null)
290 s_QuirksVersion = (BinaryCompatibility.TargetsAtLeast_Desktop_V4_5 ? UriQuirksVersion.V3 : UriQuirksVersion.V2);
291 HttpSyntaxFlags = (UriSyntaxFlags)(0x1E00F7D | (ShouldUseLegacyV2Quirks ? 33554432 : 0) | 0x4000000 | 0x10000000);
292 FileSyntaxFlags = (UriSyntaxFlags)(0xFD1 | ((!ShouldUseLegacyV2Quirks) ? 32 : 0) | 0x2000 | 0x200000 | 0x100000 | 0x400000 | 0x800000 | 0x1000000 | 0x2000000 | 0x4000000 | 0x10000000);
295 HttpUri =
new BuiltInUriParser(
"http", 80, HttpSyntaxFlags);
296 m_Table[HttpUri.SchemeName] = HttpUri;
297 HttpsUri =
new BuiltInUriParser(
"https", 443, HttpUri.m_Flags);
298 m_Table[HttpsUri.SchemeName] = HttpsUri;
299 WsUri =
new BuiltInUriParser(
"ws", 80, HttpSyntaxFlags);
300 m_Table[WsUri.SchemeName] = WsUri;
301 WssUri =
new BuiltInUriParser(
"wss", 443, HttpSyntaxFlags);
302 m_Table[WssUri.SchemeName] = WssUri;
303 FtpUri =
new BuiltInUriParser(
"ftp", 21, UriSyntaxFlags.MustHaveAuthority | UriSyntaxFlags.MayHaveUserInfo | UriSyntaxFlags.MayHavePort | UriSyntaxFlags.MayHavePath | UriSyntaxFlags.MayHaveFragment | UriSyntaxFlags.AllowUncHost | UriSyntaxFlags.AllowDnsHost | UriSyntaxFlags.AllowIPv4Host | UriSyntaxFlags.AllowIPv6Host | UriSyntaxFlags.PathIsRooted | UriSyntaxFlags.ConvertPathSlashes | UriSyntaxFlags.CompressPath | UriSyntaxFlags.CanonicalizeAsFilePath | UriSyntaxFlags.AllowIdn | UriSyntaxFlags.AllowIriParsing);
304 m_Table[FtpUri.SchemeName] = FtpUri;
305 FileUri =
new BuiltInUriParser(
"file", -1, FileSyntaxFlags);
306 m_Table[FileUri.SchemeName] = FileUri;
307 GopherUri =
new BuiltInUriParser(
"gopher", 70, UriSyntaxFlags.MustHaveAuthority | UriSyntaxFlags.MayHaveUserInfo | UriSyntaxFlags.MayHavePort | UriSyntaxFlags.MayHavePath | UriSyntaxFlags.MayHaveFragment | UriSyntaxFlags.AllowUncHost | UriSyntaxFlags.AllowDnsHost | UriSyntaxFlags.AllowIPv4Host | UriSyntaxFlags.AllowIPv6Host | UriSyntaxFlags.PathIsRooted | UriSyntaxFlags.AllowIdn | UriSyntaxFlags.AllowIriParsing);
308 m_Table[GopherUri.SchemeName] = GopherUri;
309 NntpUri =
new BuiltInUriParser(
"nntp", 119, UriSyntaxFlags.MustHaveAuthority | UriSyntaxFlags.MayHaveUserInfo | UriSyntaxFlags.MayHavePort | UriSyntaxFlags.MayHavePath | UriSyntaxFlags.MayHaveFragment | UriSyntaxFlags.AllowUncHost | UriSyntaxFlags.AllowDnsHost | UriSyntaxFlags.AllowIPv4Host | UriSyntaxFlags.AllowIPv6Host | UriSyntaxFlags.PathIsRooted | UriSyntaxFlags.AllowIdn | UriSyntaxFlags.AllowIriParsing);
310 m_Table[NntpUri.SchemeName] = NntpUri;
311 NewsUri =
new BuiltInUriParser(
"news", -1, UriSyntaxFlags.MayHavePath | UriSyntaxFlags.MayHaveFragment | UriSyntaxFlags.AllowIriParsing);
312 m_Table[NewsUri.SchemeName] = NewsUri;
313 MailToUri =
new BuiltInUriParser(
"mailto", 25, UriSyntaxFlags.MayHaveUserInfo | UriSyntaxFlags.MayHavePort | UriSyntaxFlags.MayHavePath | UriSyntaxFlags.MayHaveQuery | UriSyntaxFlags.MayHaveFragment | UriSyntaxFlags.AllowEmptyHost | UriSyntaxFlags.AllowUncHost | UriSyntaxFlags.AllowDnsHost | UriSyntaxFlags.AllowIPv4Host | UriSyntaxFlags.AllowIPv6Host | UriSyntaxFlags.MailToLikeUri | UriSyntaxFlags.AllowIdn | UriSyntaxFlags.AllowIriParsing);
314 m_Table[MailToUri.SchemeName] = MailToUri;
315 UuidUri =
new BuiltInUriParser(
"uuid", -1, NewsUri.m_Flags);
316 m_Table[UuidUri.SchemeName] = UuidUri;
317 TelnetUri =
new BuiltInUriParser(
"telnet", 23, UriSyntaxFlags.MustHaveAuthority | UriSyntaxFlags.MayHaveUserInfo | UriSyntaxFlags.MayHavePort | UriSyntaxFlags.MayHavePath | UriSyntaxFlags.MayHaveFragment | UriSyntaxFlags.AllowUncHost | UriSyntaxFlags.AllowDnsHost | UriSyntaxFlags.AllowIPv4Host | UriSyntaxFlags.AllowIPv6Host | UriSyntaxFlags.PathIsRooted | UriSyntaxFlags.AllowIdn | UriSyntaxFlags.AllowIriParsing);
318 m_Table[TelnetUri.SchemeName] = TelnetUri;
319 LdapUri =
new BuiltInUriParser(
"ldap", 389, UriSyntaxFlags.MustHaveAuthority | UriSyntaxFlags.MayHaveUserInfo | UriSyntaxFlags.MayHavePort | UriSyntaxFlags.MayHavePath | UriSyntaxFlags.MayHaveQuery | UriSyntaxFlags.MayHaveFragment | UriSyntaxFlags.AllowEmptyHost | UriSyntaxFlags.AllowUncHost | UriSyntaxFlags.AllowDnsHost | UriSyntaxFlags.AllowIPv4Host | UriSyntaxFlags.AllowIPv6Host | UriSyntaxFlags.PathIsRooted | UriSyntaxFlags.AllowIdn | UriSyntaxFlags.AllowIriParsing);
320 m_Table[LdapUri.SchemeName] = LdapUri;
321 NetTcpUri =
new BuiltInUriParser(
"net.tcp", 808, UriSyntaxFlags.MustHaveAuthority | UriSyntaxFlags.MayHavePort | UriSyntaxFlags.MayHavePath | UriSyntaxFlags.MayHaveQuery | UriSyntaxFlags.MayHaveFragment | UriSyntaxFlags.AllowDnsHost | UriSyntaxFlags.AllowIPv4Host | UriSyntaxFlags.AllowIPv6Host | UriSyntaxFlags.PathIsRooted | UriSyntaxFlags.ConvertPathSlashes | UriSyntaxFlags.CompressPath | UriSyntaxFlags.CanonicalizeAsFilePath | UriSyntaxFlags.UnEscapeDotsAndSlashes | UriSyntaxFlags.AllowIdn | UriSyntaxFlags.AllowIriParsing);
322 m_Table[NetTcpUri.SchemeName] = NetTcpUri;
323 NetPipeUri =
new BuiltInUriParser(
"net.pipe", -1, UriSyntaxFlags.MustHaveAuthority | UriSyntaxFlags.MayHavePath | UriSyntaxFlags.MayHaveQuery | UriSyntaxFlags.MayHaveFragment | UriSyntaxFlags.AllowDnsHost | UriSyntaxFlags.AllowIPv4Host | UriSyntaxFlags.AllowIPv6Host | UriSyntaxFlags.PathIsRooted | UriSyntaxFlags.ConvertPathSlashes | UriSyntaxFlags.CompressPath | UriSyntaxFlags.CanonicalizeAsFilePath | UriSyntaxFlags.UnEscapeDotsAndSlashes | UriSyntaxFlags.AllowIdn | UriSyntaxFlags.AllowIriParsing);
324 m_Table[NetPipeUri.SchemeName] = NetPipeUri;
325 VsMacrosUri =
new BuiltInUriParser(
"vsmacros", -1, UriSyntaxFlags.MustHaveAuthority | UriSyntaxFlags.MayHavePath | UriSyntaxFlags.MayHaveFragment | UriSyntaxFlags.AllowEmptyHost | UriSyntaxFlags.AllowUncHost | UriSyntaxFlags.AllowDnsHost | UriSyntaxFlags.AllowIPv4Host | UriSyntaxFlags.AllowIPv6Host | UriSyntaxFlags.FileLikeUri | UriSyntaxFlags.AllowDOSPath | UriSyntaxFlags.ConvertPathSlashes | UriSyntaxFlags.CompressPath | UriSyntaxFlags.CanonicalizeAsFilePath | UriSyntaxFlags.UnEscapeDotsAndSlashes | UriSyntaxFlags.AllowIdn | UriSyntaxFlags.AllowIriParsing);
326 m_Table[VsMacrosUri.SchemeName] = VsMacrosUri;
329 internal bool NotAny(UriSyntaxFlags flags)
331 return IsFullMatch(flags, UriSyntaxFlags.None);
334 internal bool InFact(UriSyntaxFlags flags)
336 return !IsFullMatch(flags, UriSyntaxFlags.None);
339 internal bool IsAllSet(UriSyntaxFlags flags)
341 return IsFullMatch(flags, flags);
344 private bool IsFullMatch(UriSyntaxFlags flags, UriSyntaxFlags expected)
346 UriSyntaxFlags uriSyntaxFlags = ((flags & UriSyntaxFlags.UnEscapeDotsAndSlashes) != 0 && m_UpdatableFlagsUsed) ? ((m_Flags & ~UriSyntaxFlags.UnEscapeDotsAndSlashes) | m_UpdatableFlags) : m_Flags;
347 return (uriSyntaxFlags & flags) == expected;
353 m_Scheme =
string.Empty;
356 private static void FetchSyntax(
UriParser syntax,
string lwrCaseSchemeName,
int defaultPort)
358 if (syntax.SchemeName.Length != 0)
360 throw new InvalidOperationException(SR.GetString(
"net_uri_NeedFreshParser", syntax.SchemeName));
364 syntax.m_Flags &= ~UriSyntaxFlags.V1_UnknownUri;
366 m_Table.TryGetValue(lwrCaseSchemeName, out value);
369 throw new InvalidOperationException(SR.GetString(
"net_uri_AlreadyRegistered", value.SchemeName));
371 m_TempTable.
TryGetValue(syntax.SchemeName, out value);
374 lwrCaseSchemeName = value.m_Scheme;
375 m_TempTable.Remove(lwrCaseSchemeName);
377 syntax.OnRegister(lwrCaseSchemeName, defaultPort);
378 syntax.m_Scheme = lwrCaseSchemeName;
379 syntax.CheckSetIsSimpleFlag();
380 syntax.m_Port = defaultPort;
381 m_Table[syntax.SchemeName] = syntax;
385 internal static UriParser FindOrFetchAsUnknownV1Syntax(
string lwrCaseScheme)
388 m_Table.TryGetValue(lwrCaseScheme, out value);
400 if (m_TempTable.
Count >= 512)
404 value =
new BuiltInUriParser(lwrCaseScheme, -1, UriSyntaxFlags.OptionalAuthority | UriSyntaxFlags.MayHaveUserInfo | UriSyntaxFlags.MayHavePort | UriSyntaxFlags.MayHavePath | UriSyntaxFlags.MayHaveQuery | UriSyntaxFlags.MayHaveFragment | UriSyntaxFlags.AllowEmptyHost | UriSyntaxFlags.AllowUncHost | UriSyntaxFlags.AllowDnsHost | UriSyntaxFlags.AllowIPv4Host | UriSyntaxFlags.AllowIPv6Host | UriSyntaxFlags.V1_UnknownUri | UriSyntaxFlags.AllowDOSPath | UriSyntaxFlags.PathIsRooted | UriSyntaxFlags.ConvertPathSlashes | UriSyntaxFlags.CompressPath | UriSyntaxFlags.AllowIdn | UriSyntaxFlags.AllowIriParsing);
405 m_TempTable[lwrCaseScheme] = value;
410 internal static UriParser GetSyntax(
string lwrCaseScheme)
413 m_Table.TryGetValue(lwrCaseScheme, out value);
421 internal void CheckSetIsSimpleFlag()
423 Type type = GetType();
424 if (type == typeof(GenericUriParser) || type == typeof(HttpStyleUriParser) || type == typeof(FtpStyleUriParser) || type == typeof(FileStyleUriParser) || type == typeof(NewsStyleUriParser) || type == typeof(GopherStyleUriParser) || type == typeof(NetPipeStyleUriParser) || type == typeof(NetTcpStyleUriParser) || type == typeof(LdapStyleUriParser))
426 m_Flags |= UriSyntaxFlags.SimpleUserSyntax;
430 internal void SetUpdatableFlags(UriSyntaxFlags flags)
432 m_UpdatableFlags = flags;
433 m_UpdatableFlagsUsed =
true;
439 if (
this != uriParser)
441 uriParser.m_Scheme = m_Scheme;
442 uriParser.m_Port = m_Port;
443 uriParser.m_Flags = m_Flags;
448 internal void InternalValidate(Uri thisUri, out UriFormatException parsingError)
453 internal string InternalResolve(Uri thisBaseUri, Uri uriLink, out UriFormatException parsingError)
455 return Resolve(thisBaseUri, uriLink, out parsingError);
458 internal bool InternalIsBaseOf(Uri thisBaseUri, Uri uriLink)
460 return IsBaseOf(thisBaseUri, uriLink);
468 internal bool InternalIsWellFormedOriginalString(Uri thisUri)
static CultureInfo InvariantCulture
Gets the T:System.Globalization.CultureInfo object that is culture-independent (invariant).
The exception that is thrown when a null reference (Nothing in Visual Basic) is passed to a method th...
virtual UriParser OnNewUri()
Invoked by a T:System.Uri constructor to get a T:System.UriParser instance
virtual void OnRegister(string schemeName, int defaultPort)
Invoked by the Framework when a T:System.UriParser method is registered.
The exception that is thrown when the value of an argument is outside the allowable range of values a...
UriParser()
Constructs a default URI parser.
static void Register(UriParser uriParser, string schemeName, int defaultPort)
Associates a scheme and port number with a T:System.UriParser.
UriComponents
Specifies the parts of a T:System.Uri.
bool IsAbsoluteUri
Gets whether the T:System.Uri instance is absolute.
static bool IsKnownScheme(string schemeName)
Indicates whether the parser for a scheme is registered.
int Count
Gets the number of key/value pairs contained in the T:System.Collections.Generic.Dictionary`2.
virtual void InitializeAndValidate(Uri uri, out UriFormatException parsingError)
Initialize the state of the parser and validate the URI.
string OriginalString
Gets the original URI string that was passed to the T:System.Uri constructor.
virtual string Resolve(Uri baseUri, Uri relativeUri, out UriFormatException parsingError)
Called by T:System.Uri constructors and Overload:System.Uri.TryCreate to resolve a relative URI.
virtual string GetComponents(Uri uri, UriComponents components, UriFormat format)
Gets the components from a URI.
Represents a collection of keys and values.To browse the .NET Framework source code for this type,...
UriFormat
Controls how URI information is escaped.
The exception that is thrown when a method call is invalid for the object's current state.
static bool CheckSchemeName(string schemeName)
Determines whether the specified scheme name is valid.
Provides information about a specific culture (called a locale for unmanaged code development)....
virtual bool IsWellFormedOriginalString(Uri uri)
Indicates whether a URI is well-formed.
Provides an object representation of a uniform resource identifier (URI) and easy access to the parts...
bool TryGetValue(TKey key, out TValue value)
Gets the value associated with the specified key.
Parses a new URI scheme. This is an abstract class.
virtual bool IsBaseOf(Uri baseUri, Uri relativeUri)
Determines whether baseUri is a base URI for relativeUri .