我需要一个类来操作asp.net WebForms中的URL
例如
Url url = new Url("http://www.stackoverflow.com");
if(!url.Params.Contains("user"))
url.Params.Add("user", "1");
我尝试过NameValueCollections,但它们似乎只是读取,就像HttpContext中的一些对象一样
NameValueCollection nv = Request.QueryString;
nv.Remove("ForeignLanguage");
nv.Add("ForeignLanguage", l.ID.ToString());
以上生成的集合是只读异常
答案 0 :(得分:4)
我会将UriBuilder
类与非常方便的HttpUtility.ParseQueryString
方法结合使用:
var uri = new UriBuilder("http://www.stackoverflow.com");
NameValueCollection parameters = HttpUtility.ParseQueryString(string.Empty);
parameters.Add("user", "1");
uri.Query = parameters.ToString();
return uri.ToString();
注意将空字符串传递给ParseQueryString
方法的技巧 - 这将为您提供System.Web.HttpValueCollection
的一个(可写)实例,这是一个派生自NameValueCollection
的非公共类, (以及其他内容)在调用其ToString
方法时以查询字符串格式发出其内容。
您还可以操纵当前网址:
var uri = new UriBuilder(Request.Url);
NameValueCollection parameters = HttpUtility.ParseQueryString(uri.Query);
// TODO Manipulate parameters...
uri.Query = parameters.ToString();
return uri.ToString();