2016-09-09 8 views
0

ich eine Zeichenfolge haben, die wir nennen die HttpUtility.UrlEncode("Pfx32q+xLq4R+VocXy4IC8aQNdmFqdA284THap54Bl4=") den verschlüsselten String als Parameter übergeben diese einen Wert zurückgibtHttpUtility.UrlEncode kodieren keine Zeichen wie +

Pfx32q+xLq4R+VocXy4IC8aQNdmFqdA284THap54Bl4= 

Auf Verschlüsselung diesem String verschlüsselt ist, die wie dieser

Pfx32q%2BxLq4R%2BVocXy4IC8aQNdmFqdA284THap54Bl4%3D 

wo in + ist mit% 2 usw. ersetzen und so weiter auf meinem Entwicklungssystem, aber wenn der gleiche Code auf einem Produktionsserver des Plus stattdessen bleibt es als + nicht codiert wird ausgeführt wird erhalten.

Wir können nicht darauf hinweisen, was das wirklich verursacht. Gibt es ein Szenario oder einen Fall, wo beim Aufruf der HttpUtility.UrlEncode Methode die Zeichen wie + nicht codiert werden?

+0

'+' ist auch ein gültiges Zeichen für URL, die ist der Grund, warum es nicht codiert hier wird, ist die [base URI] (https://tools.ietf.org/html/rfc3986) Definition – Webruster

+0

Sind Sie die gleiche .NET-Version auf beiden Dev-Box und Server laufen? Läuft auf dem Server möglicherweise Mono? Der Microsoft-Quellcode für .NET 4.0 und höher entkommt eindeutig '+' Zeichen. Siehe 'IsUrlSafeChar' hier http://referencesource.microsoft.com/#System/net/System/Net/WebUtility.cs Das' + 'wird im Kommentar explizit als maskiert trotz der RFC-Regeln erwähnt. – Baldrick

+2

URI * Pfade * und * Daten * sind auf verschiedene Arten kodiert. Sie sollten EscapeDataString für Daten verwenden. Sie sollten auch sicherstellen, dass Sie die gleichen .NET-Versionen auf dem Server und auf Ihrem Computer verwenden, indem Sie das Upgrade durchführen, je nachdem, was zurückliegt. –

Antwort

1

Hatte das gleiche Problem. Konvertierte die verschlüsselte Zeichenfolge zuerst in Base64 und dann in UrlEncoded.

string urlOut = HttpUtility.UrlEncode(Base64Encode("Pfx32q+xLq4R+VocXy4IC8aQNdmFqdA284THap54Bl4=")); 

    string urlIn = Base64Decode(HttpUtility.UrlDecode(urlOut)); 

    public static string Base64Encode(string plainText) 
    { 
     var plainTextBytes = Encoding.UTF8.GetBytes(plainText); 
     return Convert.ToBase64String(plainTextBytes); 
    } 

    public static string Base64Decode(string base64EncodedData) 
    { 
     var base64EncodedBytes = Convert.FromBase64String(base64EncodedData); 
     return Encoding.UTF8.GetString(base64EncodedBytes); 
    } 
+0

Es ist ein Workaround, aber es funktioniert zumindest. Sollte nicht notwendig sein, aber hey. – Baldrick

Verwandte Themen