Come ottenere una stringa di querystring quando è URLEncoded o ha caratteri percentuali in ASP.NET

StackOverflow https://stackoverflow.com/questions/1638499

Domanda

Come ottenere la stringa di query effettiva dall'oggetto Request quando la stringa di query è UrlEncoded o ha caratteri percentuali in ASP.NET?

In sostanza, se ho un URL come questo: Default.aspx? p =% b4 , come posso ottenere una stringa popolata con "% b4 " ;?

Request.QueryString [" p "] restituisce un carattere non stampabile.

Request.RawUrl restituisce Default.aspx? p =% ufffd "

Request.Url.AbsoluteUri restituisce Default.aspx? p =% EF% BF% BD

Come posso ottenere "% b4 " indietro?

È stato utile?

Soluzione

Ho approfondito ulteriormente e credo di sapere cosa sta causando questo: un client HTTP sta inviando un URL al server che non è correttamente codificato. Nello specifico, nell'URL è presente un carattere non valido.

Per ripetere, incolla quanto segue alla fine dell'URL in IE8: default.aspx?p=´

Se esamini i byte che vanno oltre il filo (ad es. usando Fiddler ), vedrai un l'effettivo carattere Hex B4 viene inviato dal client al server nell'URL. Questo è un carattere illegale in un URL, poiché gli URL sono limitati a codici char inferiori a 0x80 (tutti i codici char più grandi di 0x80 devono essere sottoposti a escape percentuale).

Quindi il tuo client sta passando un carattere non valido e il tuo server sta sostituendo (correttamente) il carattere fasullo con% EF% BF% BD che è la codifica UTF-8 per Carattere sostitutivo Unicode (U + 0FFD) , che è ciò che accade quando si incontra un personaggio che non ha equivalenti nella codifica locale.

AFAIK, questo è un bug in IE. Se si digita lo stesso URL in Firefox, Firefox codificherà correttamente l'URL (come% b4 anziché ´). Si noti che, anche AFAIK, il problema si verifica solo quando si incollano manualmente caratteri non validi nella barra degli indirizzi di IE: se lo stesso carattere è presente in un collegamento, IE sembra codificare correttamente l'URL (almeno nei casi che ho testato).

Quindi dovresti capire chi ti sta inviando questo falso URL e dire loro di iniziare a codificare correttamente i loro URL!

Altri suggerimenti

Asp.net eseguirà automaticamente la decodifica URL delle cose quando esegui Request.Querystring [" key "]. Devi solo codificarlo di nuovo.

HttpUtility.UrlEncode(Request.QueryString["p"])
HttpContext.Current.Request.ServerVariables["QUERY_STRING"]

restituirà la stringa di query RAW

Ho avuto lo stesso problema. L'ho risolto semplicemente aggiungendo in javascript " escape ('text% text') " mentre eseguo il querystring!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top