你如何操纵asp.net WebForms中的网址?

时间:2011-06-27 11:34:21

标签: asp.net url

我需要一个类来操作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());

以上生成的集合是只读异常

1 个答案:

答案 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();