.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); }