.NET的替代方案提供了关于uris和url的apis

Chr*_*sic 4 .net c# url

我最近意识到,使用URL和URI的.NET apis在实现甚至基本功能(至少容易)方面经常出现短缺,包括:从相对路径生成FQDN URL,强制https或返回http,获取网站的根,正确组合相对网址等等.

是否有任何替代库将所有这些类型的功能放在一个简单可靠的项目中?

Jon*_*nna 11

我当然发现自己在.NET中不止一次地使用相同的URI操作代码,但我不认为你的案例是缺乏的.

相对Uri的完整URI:

new Uri(base, relative) // (works whether relative is a string or a Uri).
Run Code Online (Sandbox Code Playgroud)

获取实际的FQDN:

string host = uri.Host;
string fqdn = hostEndsWith(".") ? host : host + ".";
Run Code Online (Sandbox Code Playgroud)

强制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;
Run Code Online (Sandbox Code Playgroud)

获取网站的根目录:

new Uri(startingUri, "/");
Run Code Online (Sandbox Code Playgroud)

正确组合相对网址:

new Uri(baseUri, relUri); // We had this one already.
Run Code Online (Sandbox Code Playgroud)

其中只有两个不止一个方法调用,获得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;
}
Run Code Online (Sandbox Code Playgroud)

在其他情况下,我真的看不出API如何可能更简洁.