在现在的项目中,使用到uri的部分较多。

uri的解析方法:

publicstaticUriReturnUri(thisstringval){if(string.IsNullOrEmpty(val)){thrownewArgumentNullException(val);}try{UriBuilderuri;if(val.StartsWith("http://",StringComparison.Ordinal)){uri=newUriBuilder(val);}elseif(val.StartsWith("https://",StringComparison.Ordinal)){uri=newUriBuilder(val);}elseif(val.Contains(":")){varsplit=val.Split(':','/');intport;int.TryParse(split[1],outport);uri=split.Length==3?newUriBuilder(Uri.UriSchemeHttp,split[0],port,"/"+split[2]):newUriBuilder(Uri.UriSchemeHttp,split[0],port);}else{uri=newUriBuilder(Uri.UriSchemeHttp,val);}returnuri.Uri;}catch(Exceptionexception){thrownewException(exception.Message,exception);}}

2.uri解析的重载:

publicstaticUriReturnUri(thisstringval,intport,boolssl=default(bool)){if(string.IsNullOrEmpty(val)){thrownewArgumentNullException(val);}try{UriBuilderuri;if(val.StartsWith("http://",StringComparison.Ordinal)){varsplit=val.Split('/');uri=split.Length>=4?newUriBuilder(Uri.UriSchemeHttp,split[2],port,"/"+split[3]):newUriBuilder(newUri($"{val}:{port}"));}elseif(val.StartsWith("https://",StringComparison.Ordinal)){varsplit=val.Split('/');uri=split.Length>=4?newUriBuilder(Uri.UriSchemeHttps,split[2],port,"/"+split[3]):newUriBuilder(Uri.UriSchemeHttps,split[2],port);}elseif(ssl){uri=newUriBuilder(Uri.UriSchemeHttps,val,port);}else{uri=newUriBuilder(Uri.UriSchemeHttp,val,port);}returnuri.Uri;}catch(Exceptionexception){thrownewException(exception.Message,exception);}}


publicstaticUriReturnUriWithSubDir(thisstringval,intport,boolssl,stringsubDir){varuriBuilder=newUriBuilder(val);if(ssl){uriBuilder.Scheme=Uri.UriSchemeHttps;}if(!string.IsNullOrEmpty(subDir)){uriBuilder.Path=subDir;}uriBuilder.Port=port;returnuriBuilder.Uri;}