Frage

Ich versuche, über die Abfrage-Zeichenfolge in einem Base64-String in eine C # .NET-Web-Anwendung zu übergeben. Wenn die Zeichenfolge der „+“ kommt (plus) Zeichen durch ein Leerzeichen ersetzt werden. Es scheint, dass der automatische URLDecode Prozess dies tut. Ich habe keine Kontrolle über das, was über die Abfrage-Zeichenfolge übergeben wird. Gibt es eine Möglichkeit, diese Server-Seite zu behandeln?

Beispiel:

http://localhost:3399/Base64.aspx?VLTrap=VkxUcmFwIHNldCB0byAiRkRTQT8+PE0iIHBsdXMgb3IgbWludXMgNSBwZXJjZW50Lg==

Erzeugt:

VkxUcmFwIHNldCB0byAiRkRTQT8 PE0iIHBsdXMgb3IgbWludXMgNSBwZXJjZW50Lg==

Die Menschen haben vorgeschlagen urlencoding die Abfragezeichenfolgeflag:

System.Web.HttpUtility.UrlEncode(yourString) 

Ich kann das nicht tun, da ich keine Kontrolle über die Aufrufroutine (die mit anderen Sprachen funktioniert gut).

Es war auch der Vorschlag, Räume mit einem Pluszeichen zu ersetzen:

Request.QueryString["VLTrap"].Replace(" ", "+");

Ich hatte zwar dafür aber meine Sorge mit ihm, und ich sollte diese beginnen schon erwähnt haben, ist, dass ich weiß nicht, was andere Zeichen könnte neben dem Pluszeichen malformed werden.

Mein Hauptziel ist es, den Abfrage-Zeichenfolge abzufangen, bevor es durch den Decoder ausgeführt wird.

Zu diesem Zweck habe ich versucht, bei Request.QueryString.toString suchen (), aber diese den gleichen fehlerhaften Informationen enthalten ist. Gibt es eine Möglichkeit an der rohen Abfrage-Zeichenfolge zu suchen vor es URLDecoded ist?

Nach einem weiteren Prüfung scheint es, dass .Net alles in dem QuerString kommenden erwartet URL-kodiert werden, aber der Browser nicht automatisch URL kodieren GET-Anfragen.

War es hilfreich?

Lösung

Sie können den Wert manuell (argument.Replace(' ', '+')) ersetzen oder den HttpRequest.ServerVariables["QUERY_STRING"] konsultieren (noch besser die HttpRequest.Url.Query) und analysieren Sie es selbst.

Sie sollten aber versuchen, das Problem zu lösen, wo die URL angegeben wird; ein Pluszeichen muss als „% 2B“ in der URL erhalten codierte, weil ein Plus sonst einen Raum darstellt.

Wenn Sie nicht über die eingehenden URLs steuern, die erste Option bevorzugt würde, wie Sie die meisten Fehler auf diese Weise vermeiden.

Andere Tipps

Die vorgeschlagene Lösung:

Request.QueryString["VLTrap"].Replace(" ", "+");

sollte gut funktionieren. Wie für Ihr Anliegen:

  

Ich hatte zwar dafür aber meine Sorge mit ihm, und ich sollte dies zu starten, erwähnt haben, ist, dass ich weiß nicht, was andere Zeichen neben dem Pluszeichen malformed werden.

Dies ist leicht zu lindern von Lesung über base64 . Die einzigen nicht-alphanumerischen Zeichen, die in der modernen base64 legal sind, sind „/“, „+“ und „=“ (die nur zum Auffüllen verwendet wird).

Von den „+“ ist die einzige, die in URLs besondere Bedeutung als entkam Darstellung hat. Während die anderen beiden eine besondere Bedeutung in URLs (Wegbegrenzer und Query-String-Trennzeichen) haben, sollten sie kein Problem darstellen.

Also ich denke, Sie sollten in Ordnung sein.

Ich habe genau dieses gleiche Problem, außer ich die Kontrolle über meine URL haben. Auch bei Server.URLDecode und Server.URLEncode es es nicht konvertieren zurück zu einem + Zeichen, auch wenn meine Abfrage-String sieht wie folgt aus:

http://localhost/childapp/default.aspx?TokenID=0XU%2fKUTLau%2bnSWR7%2b5Z7DbZrhKZMyeqStyTPonw1OdI%3d

Wenn ich führen Sie die folgenden.

string tokenID = Server.UrlDecode(Request.QueryString["TokenID"]);

es konvertiert noch nicht die %2b zurück in ein + Zeichen. Stattdessen habe ich folgendes zu tun:

string tokenID = Server.UrlDecode(Request.QueryString["TokenID"]);
tokenID = tokenID.Replace(" ", "+");

Dann funktioniert es richtig. Wirklich seltsam.

Ich hatte ähnliches Problem mit einem Parameter, die Base64-Wert enthält und wenn es darum geht, mit ‚+‘. Nur Request.QueryString [ "VLTrap"] Ersetzen (““, "+"). für mich hat gut funktioniert; keine UrlEncode oder andere Codierung helfen, denn selbst wenn Sie Link auf Seite selbst mit ‚+‘ codiert als ‚% 2b‘ codiert zeigen, dann ist es Browser, der es auf ‚+‘ ändert sich zunächst, wenn es showen und wenn Sie klicken Sie dann Änderungen Browser es Raum zu leeren. Also keine Möglichkeit, es als Original-Poster zu steuern, sagt, auch wenn Sie sich zeigen, verbindet. Die gleiche Sache mit einem solchen Link auch in HTML-E-Mails.

Wenn Sie die Zeichenfolge urlencode, bevor es an die URL hinzugefügt werden Sie nicht eines dieser Probleme haben (die automatische URLDecode wird es wieder in den ursprünglichen Zustand).

Nun, natürlich sollten Sie die Base64-String Urlencoded haben, bevor sie an den Server sendet.
Wenn Sie das nicht erreichen können, würde ich vorschlagen, einfach keine eingebetteten Leerzeichen ersetzt zurück zu +; da b64 Strings werden suposed keine Leerzeichen haben, es ist eine legitime Taktik ...

System.Web.HttpUtility.UrlEncode(yourString) den Trick.

Als schnelle Hack Sie Raum mit Pluszeichen vor base64-Decodierung ersetzen könnte.

Wenn Sie System.Uri.UnescapeDataString(yourString) verwenden wird es die + ignorieren. Diese Methode sollte nur in Fällen wie Ihre verwendet wird, wo, wenn die Zeichenfolge codiert wurde, eine Art von Legacy-Ansatz entweder auf dem Client oder Server.

Sehen Sie diesen Blog-Eintrag: http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx

Ich bin keineswegs ein C # -Entwickler, aber es sieht aus wie Sie ENCODE Ihre Base64-String url müssen, bevor sie als URL senden.

Sie können nicht einfach davon ausgehen, ein Raum a + ist und es ersetzen?

Request.QueryString["VLTrap"].Replace(" ", "+");

;)

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