L'oggetto richiesta non decodifica UrlEncoded
-
10-07-2019 - |
Domanda
C #, ASP.NET 3.5
Creo un semplice URL con una stringa di query codificata:
string url = "http://localhost/test.aspx?a=" +
Microsoft.JScript.GlobalObject.escape("áíóú");
che diventa piacevolmente: http: //localhost/test.aspx? a =% E1% ED% F3% FA (va bene)
Quando debug test.aspx ottengo una strana decodifica:
string badDecode = Request.QueryString["a"]; //bad
string goodDecode = Request.Url.ToString(); //good
Perché QueryString non dovrebbe decodificare i valori?
Soluzione
Potresti provare a usare HttpServerUtility.UrlEncode invece.
Documentazione Microsoft su Microsoft.JScript.GlobalObject. escape afferma che non è previsto che venga utilizzato direttamente dal tuo codice.
Modifica
Come ho detto nei commenti: i due metodi codificano in modo diverso e Request.QueryString prevede la codifica utilizzata da HttpServerUtility.UrlEncode poiché utilizza internamente HttpUtility.UrlDecode.
(HttpServerUtility.UrlEncode attualmente utilizza HttpUtility.UrlEncode internamente.)
Puoi facilmente vedere la differenza tra i due metodi.
Creare una nuova applicazione Web ASP.NET, aggiungere un riferimento a Microsoft.JScript quindi aggiungere il seguente codice:
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"]);
}
}
Il risultato dovrebbe essere:
%E1%ED%F3%FA
%c3%a1%c3%ad%c3%b3%c3%ba
����
áíóú