urlencode все параметры строки запроса

Есть ли способ кодировать URL-адрес всей строки запроса URL, не пытаясь кодировать каждый отдельный параметр строки запроса. Сейчас мне нужно перестроить строку запроса примерно так:

foreach (string x in Page.Request.QueryString.Keys)
{
 sQueryString += x + "=" + Server.UrlEncode(Request.Params.Get(x)) + "&";
}

person Tim Boland    schedule 14.07.2009    source источник


Ответы (2)


Все, что вам нужно сделать, это получить следующее значение:

Page.Request.Url.Query

См.:

    Uri baseUri = new Uri("http://www.contoso.com/catalog/shownew.htm?date=today&<a>=<b&gt;");
    string queryString = baseUri.Query;

Параметр queryString вернет ?date=today&%3Ca%3E=%3Cb%3E.

Еще одно редактирование — из MSDN:

Свойство Query содержит любую информацию о запросе, включенную в URI. Информация о запросе отделяется от информации о пути знаком вопроса (?) и продолжается до конца URI. Возвращаемая информация запроса включает начальный вопросительный знак.

Информация запроса экранируется по умолчанию в соответствии с RFC 2396. Если включен синтаксический анализ международных идентификаторов ресурсов (IRI) или интернационализированных доменных имен (IDN), информация запроса экранируется в соответствии с RFC 3986 и RFC 3987.

person Alex    schedule 14.07.2009
comment
Это даст вам всю текущую QueryString, однако, если вы запустите для нее URLEncode, вы потеряете свои значения, поскольку амперсанд (&) будет заменен версиями, безопасными для URL. - person Keith Adler; 14.07.2009
comment
.Query нет, но это работает отлично: Page.Request.Url.AbsoluteUri - person Tim Boland; 14.07.2009

Помимо использования string.Format и наличия дополнительного & в конце вашей QueryString, подход, описанный выше, является оптимальным.

person Keith Adler    schedule 14.07.2009