我经常最终为System.Uri推出自己的包装器/扩展方法,并且想知道是否有人知道一个好的开源实现.我最喜欢做的是解析查询字符串参数,构建一个新的查询字符串(这是键),并替换页面名称.有什么好的,或者System.Uri对你来说足够好吗?
Chr*_*tow 15
BradVin的QueryString Builder类很好.流畅的界面和对加密的支持.
在CodeProject上查看这个UrlBuilder类也是值得的.与System.UriBuilder类似,更好地支持使用QueryString.
Tod*_*ier 12
Flurl [披露:我是作者]是一个流畅的URL构建器,如下所示:
var url = "http://www.some-api.com"
.AppendPathSegment("endpoint")
.SetQueryParams(new {
api_key = ConfigurationManager.AppSettings["SomeApiKey"],
max_results = 20,
q = "Don't worry, I'll get encoded!"
});
Run Code Online (Sandbox Code Playgroud)
如果您正在构建URL以便调用它们,Flurl.Http是一个伴随库,可以让您从流畅的链中执行HTTP:
await "https://api.mysite.com"
.AppendPathSegment("person")
.SetQueryParams(new { ap_key = "my-key" })
.WithOAuthBearerToken("MyToken")
.PostJsonAsync(new { first_name = firstName, last_name = lastName });
Run Code Online (Sandbox Code Playgroud)
获取NuGet的完整包:
PM> Install-Package Flurl.Http
或者只是独立的URL构建器:
PM> Install-Package Flurl
正如你所说,我们确实使用了部分基于Uri的替代Uri类.但是,我认为有一个重要的区别 - System.Uri通常是不可变的 - 或者更准确地说,是不可变的行为.一旦出现,它代表一个精确的通用位置/资源端点.如果需要描述其他位置,则应创建新的Uri,而不是更改现有的Uri.
有一个专门生产Uri的独立课程:UriBuilder.