C#Url Builder类

Tre*_*ent 12 c# asp.net

我经常最终为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


Rex*_*x M 6

正如你所说,我们确实使用了部分基于Uri的替代Uri类.但是,我认为有一个重要的区别 - System.Uri通常是不可变的 - 或者更准确地说,是不可变的行为.一旦出现,它代表一个精确的通用位置/资源端点.如果需要描述其他位置,则应创建新的Uri,而不是更改现有的Uri.

有一个专门生产Uri的独立课程:UriBuilder.