Pedido de objeto não decodificação urlencoded
-
10-07-2019 - |
Pergunta
C #, ASP.NET 3.5
I criar uma URL simples com uma querystring codificado:
string url = "http://localhost/test.aspx?a=" +
Microsoft.JScript.GlobalObject.escape("áíóú");
que se torna bem: http: //localhost/test.aspx? a =% E1% ED% F3% FA (que é bom)
Quando eu debug test.aspx eu recebo decodificação estranho:
string badDecode = Request.QueryString["a"]; //bad
string goodDecode = Request.Url.ToString(); //good
Por que o QueryString não decodificar os valores?
Solução
Você poderia tentar usar HttpServerUtility.UrlEncode .
documentaçãoMicrosoft em Microsoft.JScript.GlobalObject. escapar estados que não é inteded a ser usado diretamente de dentro do seu código.
Editar:
Como disse nos comentários: Os dois métodos de codificar de forma diferente e Request.QueryString espera que a codificação utilizado pelo HttpServerUtility.UrlEncode uma vez que utiliza internamente HttpUtility.UrlDecode.
(HttpServerUtility.UrlEncode usa realmente HttpUtility.UrlEncode internamente.)
Você pode ver facilmente a diferença entre os dois métodos.
Crie um novo aplicativo Web ASP.NET, adicionar uma referência para Microsoft.JScript em seguida, adicione o seguinte 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"]);
}
}
O resultado deve ser:
%E1%ED%F3%FA
%c3%a1%c3%ad%c3%b3%c3%ba
����
áíóú