是否有UriAgilityPack/UrlAgilityPack?

Chu*_*age 0 c# asp.net

我总是试图找出一些用asp.net来操纵uri/url的url/uri方法.

有这样的感觉很高兴:

UriAgilityPack uri = new UriAgilityPack("http://some.com/path?query1=value1");
Run Code Online (Sandbox Code Playgroud)

要么

UriAgilityPack uri = new UriAgilityPack().LoadSiteRelative("~/path?query1=value1");
Run Code Online (Sandbox Code Playgroud)

然后用

enum Schemes {
  Http,
  Https
}

uri.Scheme = Schemes.Https;
Run Code Online (Sandbox Code Playgroud)

和/或

foreach(QueryItem item in uri.Query)
   // do something with item
Run Code Online (Sandbox Code Playgroud)

和/或

uri.Query.Add("AddToCart", 5)
Run Code Online (Sandbox Code Playgroud)

string s = uri.ToString() // https://some.com/path?query1=value1&AddToCart=5

要么

string root = uri.RootPath                // /path?query1=value1&AddToCart=5
string relative = uri.RootRelativePath;   // ~/path?query1=value1&AddToCart=5
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 5

对于已经内置到框架中的东西,不需要敏捷包.所以从Uri开始:

var uri = new Uri("http://some.com/path?query1=value1");
Run Code Online (Sandbox Code Playgroud)

然后:

Console.WriteLine(uri.Scheme);
Run Code Online (Sandbox Code Playgroud)

然后:

var nvc = HttpUtility.ParseQueryString(uri.Query);
foreach (string key in nvc)
{
    Console.WriteLine("key: {0}, value: {1}", key, nvc[key]);
}
Run Code Online (Sandbox Code Playgroud)

然后:

var builder = new UriBuilder(uri);
var nvc = HttpUtility.ParseQueryString(uri.Query);
nvc.Add("AddToCart", "5");
builder.Query = nvc.ToString();
Console.WriteLine(builder.ToString());
Run Code Online (Sandbox Code Playgroud)

最后:

Console.WriteLine(builder.Uri.PathAndQuery);
Run Code Online (Sandbox Code Playgroud)

看它有多容易?甚至更酷的是你可以在桌面应用程序中执行此操作,根本不需要ASP.NET.

如果我在.NET中处理url时有一个建议给你,那就永远不要使用字符串连接.始终使用API​​,因为它将保证您正确编码和尊重Web标准.