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

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

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

XUri是一个很好的类,是MindTouch开源项目的一部分

http://developer.mindtouch.com/en/ref/dream/MindTouch.Dream/XUri?highlight=XUri

本文包含有关如何使用它的快速示例。

http://blog.developer.mindtouch.com/2009/05/18/consuming-rest-services-and-tdd-with-plug/

我是它的粉丝。 如果您打算使用XUri部分,那么有点矫枉过正,但是库中还有其他非常好的东西。

我当然发现自己在.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如何可能更简洁。

我也使用扩展名与’System.IO.Path’对象的组合。

例如,这些只是模糊。

  public static Uri SecureIfRemote(this Uri uri){ if(!System.Web.HttpContext.Current.Request.IsSecureConnection && !System.Web.HttpContext.Current.Request.IsLocal){ return new Uri......(build secure uri here) } return uri; } public static NameValueCollection ParseQueryString(Uri uri){ return uri.Query.ParseQueryString(); } public static NameValueCollection ParseQueryString(this string s) { //return return HttpUtility.ParseQueryString(s); }