Объект запроса не декодирует UrlEncoded - PullRequest
0 голосов
/ 17 сентября 2009

C #, ASP.NET 3.5

Я создаю простой URL с закодированной строкой запроса:

string url = "http://localhost/test.aspx?a=" +
     Microsoft.JScript.GlobalObject.escape("áíóú");

, что становится красиво: http://localhost/test.aspx?a=%E1%ED%F3%FA (это хорошо)

Когда я отлаживаю test.aspx, я получаю странное декодирование:

string badDecode = Request.QueryString["a"];  //bad
string goodDecode = Request.Url.ToString();    //good

Почему бы QueryString не декодировать значения?

1 Ответ

1 голос
/ 17 сентября 2009

Вы можете попробовать вместо этого использовать HttpServerUtility.UrlEncode .

Документация Microsoft по Microsoft.JScript.GlobalObject.escape гласит, что она не предназначена для использования непосредственно из вашего кода.

Edit:
Как я сказал в комментариях: эти два метода кодируются по-разному, и Request.QueryString ожидает кодирование, используемое HttpServerUtility.UrlEncode, поскольку оно внутренне использует HttpUtility.UrlDecode.

(HttpServerUtility.UrlEncode фактически использует HttpUtility.UrlEncode для внутреннего использования.)

Вы можете легко увидеть разницу между этими двумя методами.
Создайте новое веб-приложение ASP.NET, добавьте ссылку на Microsoft.JScript, а затем добавьте следующий код:

protected void Page_Load(object sender, EventArgs e)
{
  var msEncode = Microsoft.JScript.GlobalObject.escape("áíóú");
  var httpEncode = Server.UrlEncode("áíóú");

  if (Request.QueryString["a"] == null)
  {
    var url = "/default.aspx?a=" + msEncode + "&b=" + httpEncode;
    Response.Redirect(url);
  }
  else
  {
    Response.Write(msEncode + "<br />");
    Response.Write(httpEncode + "<br /><br />");

    Response.Write(Request.QueryString["a"] + "<br />");
    Response.Write(Request.QueryString["b"]);
  }
}

Результат должен быть:

%E1%ED%F3%FA
%c3%a1%c3%ad%c3%b3%c3%ba

����
áíóú
...