在现在的项目中,使用到uri的部分较多。
uri的解析方法:
public static Uri ReturnUri(this string val)
{
if (string.IsNullOrEmpty(val))
{
throw new ArgumentNullException(val);
}
try
{
UriBuilder uri;
if (val.StartsWith("http://", StringComparison.Ordinal))
{
uri = new UriBuilder(val);
}
else if (val.StartsWith("https://", StringComparison.Ordinal))
{
uri = new UriBuilder(val);
}
else if (val.Contains(":"))
{
var split = val.Split(':', '/');
int port;
int.TryParse(split[1], out port);
uri = split.Length == 3
? new UriBuilder(Uri.UriSchemeHttp, split[0], port, "/" + split[2])
: new UriBuilder(Uri.UriSchemeHttp, split[0], port);
}
else
{
uri = new UriBuilder(Uri.UriSchemeHttp, val);
}
return uri.Uri;
}
catch (Exception exception)
{
throw new Exception(exception.Message, exception);
}
}
2.uri解析的重载:
public static Uri ReturnUri(this string val, int port, bool ssl = default(bool))
{
if (string.IsNullOrEmpty(val))
{
throw new ArgumentNullException(val);
}
try
{
UriBuilder uri;
if (val.StartsWith("http://", StringComparison.Ordinal))
{
var split = val.Split('/');
uri = split.Length >= 4 ? new UriBuilder(Uri.UriSchemeHttp, split[2], port, "/" + split[3]) : new UriBuilder(new Uri($"{val}:{port}"));
}
else if (val.StartsWith("https://", StringComparison.Ordinal))
{
var split = val.Split('/');
uri = split.Length >= 4
? new UriBuilder(Uri.UriSchemeHttps, split[2], port, "/" + split[3])
: new UriBuilder(Uri.UriSchemeHttps, split[2], port);
}
else if(ssl)
{
uri = new UriBuilder(Uri.UriSchemeHttps, val, port);
}
else
{
uri = new UriBuilder(Uri.UriSchemeHttp, val, port);
}
return uri.Uri;
}
catch (Exception exception)
{
throw new Exception(exception.Message, exception);
}
}
public static Uri ReturnUriWithSubDir(this string val, int port, bool ssl, string subDir)
{
var uriBuilder = new UriBuilder(val);
if (ssl)
{
uriBuilder.Scheme = Uri.UriSchemeHttps;
}
if (!string.IsNullOrEmpty(subDir))
{
uriBuilder.Path = subDir;
}
uriBuilder.Port = port;
return uriBuilder.Uri;
}
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。