Frage

Ich versuche, eine Windows-Client-Anwendung zu schreiben, die eine Website für Datenanrufe. Damit die installiert ich nur auf ein Minimum versuchen benutzen DLLs in .NET Framework Client Profil . Das Problem ist, dass ich zu UrlEncode müssen einige Parameter, gibt es einen einfachen Weg, dies zu tun, ohne System.Web.dll zu importieren, die nicht Teil des Auftraggebers Pofile ist?

War es hilfreich?

Lösung

System.Uri.EscapeUriString() kann mit bestimmten Zeichen problematisch sein, für mich war es eine Zahl / pound ‚#‘ Zeichen in der Zeichenkette.

Wenn das ein Problem für Sie, versuchen Sie:

System.Uri.EscapeDataString() //Works excellent with individual values

Hier ist eine Frage SO Antwort, die den Unterschied erklärt:

Was ist der Unterschied zwischen EscapeUriString und EscapeDataString?

und empfiehlt die Verwendung Uri.EscapeDataString() in jedem Aspekt.

Andere Tipps

In .NET 4.5+ Verwendung https://stackoverflow.com/a/11236038/555798

Zeilenumbrüche Alle von ihnen hier aufgelistet (außer HttpUtility.HtmlEncode) wird "\n\r" in %0a%0d oder %0A%0D

konvertieren

Bitte fühlen Sie sich frei zu bearbeiten und neue Charaktere zu meinem Test-String hinzufügen oder sie in den Kommentaren hinterlassen und ich werde es ändern.

Die Antworten hier sind sehr gut, aber für mich immer noch unzureichend.

Ich schrieb eine kleine Schleife, die Uri.EscapeUriString mit Uri.EscapeDataString für alle Zeichen von 0 bis 255 vergleicht.

. HINWEIS: Beide Funktionen haben die eingebaute Intelligenz die Zeichen über 0x80 sind erste UTF-8 codiert und dann Prozent codiert

Hier ist das Ergebnis:

******* Different *******

'#' -> Uri "#" Data "%23"
'$' -> Uri "$" Data "%24"
'&' -> Uri "&" Data "%26"
'+' -> Uri "+" Data "%2B"
',' -> Uri "," Data "%2C"
'/' -> Uri "/" Data "%2F"
':' -> Uri ":" Data "%3A"
';' -> Uri ";" Data "%3B"
'=' -> Uri "=" Data "%3D"
'?' -> Uri "?" Data "%3F"
'@' -> Uri "@" Data "%40"


******* Not escaped *******

'!' -> Uri "!" Data "!"
''' -> Uri "'" Data "'"
'(' -> Uri "(" Data "("
')' -> Uri ")" Data ")"
'*' -> Uri "*" Data "*"
'-' -> Uri "-" Data "-"
'.' -> Uri "." Data "."
'_' -> Uri "_" Data "_"
'~' -> Uri "~" Data "~"

'0' -> Uri "0" Data "0"
.....
'9' -> Uri "9" Data "9"

'A' -> Uri "A" Data "A"
......
'Z' -> Uri "Z" Data "Z"

'a' -> Uri "a" Data "a"
.....
'z' -> Uri "z" Data "z"

******* UTF 8 *******

.....
'Ò' -> Uri "%C3%92" Data "%C3%92"
'Ó' -> Uri "%C3%93" Data "%C3%93"
'Ô' -> Uri "%C3%94" Data "%C3%94"
'Õ' -> Uri "%C3%95" Data "%C3%95"
'Ö' -> Uri "%C3%96" Data "%C3%96"
.....

EscapeUriString ist zu kodieren URLs verwendet werden, während EscapeDataString zum Beispiel der Inhalt eines Cookies zu kodieren verwendet werden soll, weil Cookie-Daten nicht die reservierten Zeichen '=' und ';' enthalten muss.

Es ist eine Client-Profil nutzbare Version, System.Net.WebUtility Klasse, in Client-Profil System.dll. Hier ist der MSDN-Link:

WebUtility

Hier ist ein Beispiel eine POST-Anforderung senden, dass richtig Parameter codiert application/x-www-form-urlencoded Inhaltstyp mit:

using (var client = new WebClient())
{
    var values = new NameValueCollection
    {
        { "param1", "value1" },
        { "param2", "value2" },
    };
    var result = client.UploadValues("http://foo.com", values);
}

Um UrlEncode ohne System.Web:

String s = System.Net.WebUtility.UrlEncode(str);
//fix some different between WebUtility.UrlEncode and HttpUtility.UrlEncode
s = Regex.Replace(s, "(%[0-9A-F]{2})", c => c.Value.ToLowerInvariant());

Weitere Informationen: https: //www.samnoble .co.uk / 2014/05/21 / Vorsicht-webutility-urlencode-vs-HttpUtility-urlencode /

System.Net.WebUtility.HtmlDecode
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top