Wie bekommt man einen querystring, wenn es URLEncoded oder hat das Prozent-Zeichen in ASP.NET
Wie man den aktuellen querystring-Parameter aus dem Request-Objekt aus, wenn der querystring ist UrlEncoded oder hat das Prozent-Zeichen in ASP.NET?
Im Grunde, wenn ich eine Url wie diese: Default.aspx?p=%b4
, wie bekomme ich ein string gefüllt mit "%b4"?
Request.QueryString["p"]
gibt ein nicht druckbares Zeichen.
Request.RawUrl
gibt Standard.aspx?p=%ufffd"
Request.Url.AbsoluteUri
gibt Standard.aspx?p=%EF%BF%BD
Wie kann ich "%b4" zurück?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich grub in diesem weiter, und glaube, dass ich weiß, was der Grund dafür: ein HTTP-client wird die übermittlung einer URL an den server die nicht richtig URL-kodiert. Speziell, es ist ein ungültiges Zeichen in der URL.
Reproduzieren, fügen Sie Folgendes an das Ende deiner URL in IE8:
default.aspx?p=´
Wenn Sie untersuchen, werden die bytes über die Leitung (z.B. über Fiddler), sehen Sie die tatsächlichen Hex-B4-Zeichen gesendet wird, wird vom client an den server in der URL. Dies ist ein unzulässiges Zeichen in einer URL, da sich die URLs beschränkt auf char-codes unter 0x80 (größer-als-0x80-char-codes sind die Prozent-geflohen).
Damit Ihre Kunden ist die übergabe in ein ungültiges Zeichen, und dein server ist (korrekt) einbauen die falschen Zeichen mit %EF%BF%BD, die die UTF-8-Codierung für die Unicode Replacement Character (U+0FFD) ist, was geschieht, wenn ein Zeichen gefunden wird, das keine Entsprechung in der lokalen Codierung.
AFAIK, dies ist ein bug im IE. Wenn Sie dieselbe URL in Firefox, Firefox codieren der URL, richtig (als %b4 statt ). Beachten Sie, dass, auch, soweit ich weiß, passiert das nur beim manuellen einfügen von ungültigen Zeichen in der IE-Adressleiste,-- wenn die gleichen Zeichen vorhanden ist, in einem link, der IE scheint zum codieren der URL, richtig (zumindest in den Fällen, die ich getestet habe).
So sollten Sie herausfinden, wer sendet diese falsche URL auf, und sagen Sie Ihnen, um zu beginnen Codierung Ihre URLs richtig!
Asp.net automatisch URL-Decode Sachen, wenn Sie Wunsch.Querystring["key"]. Sie brauchen nur zu Kodieren es wieder.
zurück, die RAW-Query-String
Ich hatte das gleiche problem. Ich löste es, einfach durch hinzufügen in javascript "escape('text % text')", während contructing die querystring!