我最近意识到,使用 URL 和 URI 的 .NET api 在实现基本功能(至少很容易)方面经常出现不足,包括诸如:从相对路径生成 FQDN url,强制 https或返回到 http,获取站点的根目录,正确组合相关 URL 等等。
是否有任何替代库将所有这些类型的功能放在一个简单可靠的项目中?
最佳答案
我确实发现自己在 .NET 中不止一次执行相同的 URI 操作代码,但我不认为您的案例有什么不足之处。
来自相对 URI 的完整 URI:
new Uri(base, relative) // (works whether relative is a string or a Uri).
获取实际的 FQDN:
string host = uri.Host;
string fqdn = hostEndsWith(".") ? host : host + ".";
强制 https 或返回 http:
UriBuilder toHttp = new UriBuilder(someUri);
toHttp.Scheme = "http";
toHttp.Port = 80;
return toHttp.Uri;
UriBuilder toHttps = new UriBuilder(someUri);
toHttps.Scheme = "https";
toHttps.Port = 443;
return toHttps.Uri;
获取网站的根目录:
new Uri(startingUri, "/");
正确组合相对 URL:
new Uri(baseUri, relUri); // We had this one already.
其中只有两个不仅仅是一个方法调用,而且在那些获得 FQDN 的方法中,它们是相当模糊的(除非你不想要以点结尾的 FQDN 而只是想要绝对 URI,在这种情况下我们回到单一方法调用)。
HTTPS/HTTP 切换有一个单一的方法版本,尽管它实际上更麻烦,因为它调用了 Uri 对象的多个属性。我可以接受只需要几行代码就可以完成此切换。
不过,要提供一个新的 API,只需提供:
public static Uri SetHttpPrivacy(this Uri uri, bool privacy)
{
UriBuilder ub = new UriBuilder(uri);
if(privacy)
{
ub.Scheme = "https";
ub.Port = 443;
}
else
{
ub.Scheme = "http";
ub.Port = 80;
}
return ub.Uri;
}
我真的看不出 API 在其他情况下怎么可能更简洁。
关于c# - .NET 的替代方案提供了关于 uris 和 url 的 api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3525258/