Как вы управляете URL в веб-формах asp.net? - PullRequest
2 голосов
/ 27 июня 2011

Мне нужен класс для управления URL-адресами в asp.net WebForms

например

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 Ответ

4 голосов
/ 27 июня 2011

Я бы использовал класс 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.

Вы также можете манипулировать текущим URL:

var uri = new UriBuilder(Request.Url);
NameValueCollection parameters = HttpUtility.ParseQueryString(uri.Query);
// TODO Manipulate parameters...
uri.Query = parameters.ToString();
return uri.ToString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...