Pregunta

C #, ASP.NET 3.5

Creo una URL simple con una cadena de consulta codificada:

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

que se vuelve agradable: http: //localhost/test.aspx? a =% E1% ED% F3% FA (eso es bueno)

Cuando depuro test.aspx obtengo una decodificación extraña:

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

¿Por qué QueryString no decodifica los valores?

¿Fue útil?

Solución

Puede intentar utilizar HttpServerUtility.UrlEncode en su lugar.

Documentación de Microsoft en Microsoft.JScript.GlobalObject. escape indica que no está destinado a ser utilizado directamente desde su código.

Editar:
Como dije en los comentarios: los dos métodos codifican de manera diferente y Request.QueryString espera la codificación utilizada por HttpServerUtility.UrlEncode ya que internamente usa HttpUtility.UrlDecode.

(HttpServerUtility.UrlEncode realmente usa HttpUtility.UrlEncode internamente).

Puede ver fácilmente la diferencia entre los dos métodos.
Cree una nueva aplicación web ASP.NET, agregue una referencia a Microsoft.JScript y luego agregue el siguiente código:

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"]);
  }
}

El resultado debería ser:

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

����
áíóú
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top