Ich versuche, eine Windows-Clientanwendung zu schreiben, die eine Website für Daten aufruft. Um die Installation auf ein Minimum zu beschränken, versuche ich, nur DLLs im .NET Framework-Clientprofil zu verwenden . Das Problem ist, dass ich einige Parameter urlEncode muss. Gibt es eine einfache Möglichkeit, dies zu tun, ohne System.Web.dll zu importieren, das nicht Teil des Client-Pofiles ist?
c#
.net
urlencode
.net-client-profile
Martin Brown
quelle
quelle
WebRequest
oderWebClient
. Das ist der Grund, warum ich nach diesem bestimmten Code gefragt habe, weil es Dinge gibt, die getan werden können, um Daten ordnungsgemäß mit URL-Codierung zu versehen.Antworten:
System.Uri.EscapeUriString()
kann bei bestimmten Zeichen problematisch sein, für mich war es ein Zahlen- / Pfund-Zeichen in der Zeichenfolge.Wenn dies ein Problem für Sie ist, versuchen Sie:
Hier ist eine SO-Antwort, die den Unterschied erklärt:
Was ist der Unterschied zwischen EscapeUriString und EscapeDataString?
und empfiehlt,
Uri.EscapeDataString()
in jedem Aspekt zu verwenden.quelle
Uri.EscapeUriString
ist in der Tat sehr problematisch und sollte nicht verwendet werden, da versucht wird, etwas zu tun (vollständige URIs zu umgehen), das tatsächlich nicht konsequent möglich ist. In dieser Antwort finden Sie eine ausführliche Erklärung.In .Net 4.5+ verwenden
WebUtility
Nur zur Formatierung sende ich dies als Antwort.
Konnte keine guten Beispiele finden, die sie so vergleichen:
Ausgänge:
In .Net 4.5+ verwenden
WebUtility
.UrlEncode
Dies scheint
HttpUtility.UrlEncode
(vor Version 4.0) für die gebräuchlichsten Zeichen zu replizieren :Uri.EscapeDataString(testString).Replace("%20", "+").Replace("'", "%27").Replace("~", "%7E")
Hinweis: Es
EscapeUriString
wird eine gültige Uri-Zeichenfolge beibehalten , wodurch so viele Klartextzeichen wie möglich verwendet werden.In dieser Antwort finden Sie eine Tabelle zum Vergleich der verschiedenen Codierungen:
https://stackoverflow.com/a/11236038/555798
Zeilenumbrüche Alle hier aufgeführten (außer
HttpUtility.HtmlEncode
) werden"\n\r"
in%0a%0d
oder konvertiert%0A%0D
Bitte zögern Sie nicht, dies zu bearbeiten und meiner Testzeichenfolge neue Zeichen hinzuzufügen, oder lassen Sie sie in den Kommentaren und ich werde es bearbeiten.
quelle
EscapeDataString
anstattEscapeUriString
wie wir kodieren Wagenrücklauf und Zeilenvorschub und diese die aggressivere erforderlich erfolgen durch austretendesEscapeDataString
Sie können verwenden
Uri.EscapeUriString (siehe http://msdn.microsoft.com/en-us/library/system.uri.escapeuristring.aspx )
quelle
Uri.EscapeUriString
. Es "versteht" nicht, welche Teile codiert werden sollen, es ist nur ein fehlgeleiteter Versuch, etwas zu tun (vollständige URIs zu umgehen), was eigentlich unmöglich konsequent zu tun ist. In dieser Antwort finden Sie eine ausführliche Erklärung.Die Antworten hier sind sehr gut, aber für mich immer noch unzureichend.
Ich schrieb eine kleine Schleife , die vergleicht
Uri.EscapeUriString
mitUri.EscapeDataString
für alle Zeichen von 0 bis 255.HINWEIS: Beide Funktionen verfügen über die integrierte Intelligenz, dass Zeichen über 0x80 zuerst UTF-8-codiert und dann prozentual codiert werden.
Hier ist das Ergebnis:
EscapeUriString
soll zum Codieren von URLs verwendet werden, währendEscapeDataString
zum Beispiel zum Codieren des Inhalts eines Cookies verwendet werden soll, da Cookie-Daten nicht die reservierten Zeichen'='
und enthalten dürfen';'
.quelle
Uri.EscapeUriString
, da es unmöglich ist, vollständige URIs zu umgehen. In dieser Antwort finden Sie eine ausführliche Erklärung.Im Clientprofil System.dll ist eine vom Clientprofil verwendbare Version, die System.Net.WebUtility-Klasse, vorhanden. Hier ist der MSDN-Link:
WebUtility
quelle
Hier ist ein Beispiel für das Senden einer POST-Anforderung, die Parameter mithilfe des
application/x-www-form-urlencoded
Inhaltstyps ordnungsgemäß codiert :quelle
Zu UrlEncode ohne Verwendung von System.Web:
Weitere Details: https://www.samnoble.co.uk/2014/05/21/beware-webutility-urlencode-vs-httputility-urlencode/
quelle
quelle