So erhalten Sie einen QueryString, wenn sie urlencodiert ist oder prozentuale Zeichen in ASP.NET hat

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

Frage

Wie bekomme ich das tatsächliche QueryString aus dem Anforderungsobjekt, wenn der QueryString urlencodiert ist oder Prozentzeichen in ASP.NET aufweist?

Grundsätzlich, wenn ich eine URL wie diese habe: Default.aspx?p=%b4, Wie bekomme ich eine Saite mit "%b4"?

Request.QueryString["p"] Gibt einen nicht druckbaren Charakter zurück.

Request.RawUrl Gibt default.aspx? p =%Ufffd "

Request.Url.AbsoluteUri Rendite default.aspx? P =%EF%BF%bd

Wie kann ich "%b4" zurückbekommen?

War es hilfreich?

Lösung

Ich habe mich weiter in diese Weise ausgegriffen und glaube, ich weiß, was dies verursacht: Ein HTTP-Client sendet eine URL an den Server, der nicht ordnungsgemäß URL-codiert ist. Insbesondere gibt es in der URL ein ungültiges Zeichen.

Um zu reproduzieren, fügen Sie Folgendes am Ende Ihrer URL in IE8 ein: default.aspx?p=´

Wenn Sie die Bytes untersuchen, die über den Draht gehen (z. B. verwenden Geiger) Sie werden sehen, dass ein tatsächlicher Hex -B4 -Charakter vom Client in die URL an Server gesendet wird. Dies ist ein illegaler Charakter in einer URL, da die URLs auf CHOD-Codes unter 0x80 beschränkt sind (alle größeren als 0 x 80 CHAR-Codes müssen prozentuell aufgetaucht sein).

Ihr Client gibt also ein ungültiges Zeichen, und Ihr Server ersetzt (richtig) das falsche Zeichen durch%EF%BF%BD, was die UTF-8-Codierung für die ist Unicode -Ersatzzeichen (U+0ffd), was passiert, wenn ein Charakter auftritt, was in der lokalen Codierung kein Äquivalent enthält.

Afaik, das ist ein Fehler in IE. Wenn Sie dieselbe URL in Firefox eingeben, codiert Firefox die URL ordnungsgemäß (als %b4 anstelle von ´). Beachten Sie, dass auch AFAIK das Problem nur auftritt, wenn man ungültige Zeichen manuell in IEs Adressleiste einfügt- wenn das gleiche Zeichen in einem Link vorhanden ist, scheint der IE die URL ordnungsgemäß zu codieren (zumindest in den von mir getesteten Fällen).

Sie sollten also herausfinden, wer diese falsche URL an Sie sendet, und ihnen sagen, dass sie ihre URLs richtig codieren sollen!

Andere Tipps

ASP.NET wird automatisch URL -Decodien -Sachen bei der Request.queryString ["Key"]. Sie müssen es nur noch einmal codieren.

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

wird die rohe Abfragezeichenfolge zurückgeben

Ich hatte das gleiche Problem. Ich habe es gelöst, indem ich JavaScript "Escape ('Text % text')" hinzugefügt habe, während ich den QueryString verstoßen habe!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top