2016-07-27 7 views
10

Ich arbeite an einer asp.net mvc-Webanwendung. Ich habe nun einen Wert für das Betriebssystem, die gleich: -UriBuilder kann UriBuilder-registriertes Zeichen nicht codieren

enter image description here

und ich bin mit dem folgenden Code eine URL mit dem obigen Wert wie folgt aufzubauen: -

var query = HttpUtility.ParseQueryString(string.Empty); 
query["osName"] = OperatingSystem; 


var url = new UriBuilder(apiurl); 
url.Query = query.ToString(); 
string xml = client.DownloadString(url.ToString()); 

aber die erzeugte uRL wird den folgenden Wert für das Betriebssystem enthalten: -

osName=Microsoft%u00ae+Windows+Server%u00ae+2008+Standard 

so die UriBuilder das eingetragene Zeichen alskodierenwas ist falsch seit, wenn ich versuche, die mit Online-Site wie http://meyerweb.com/eric/tools/dencoder/ zu entschlüsseln wird es nicht %u00ae+ als Register Zeichen decodieren ??? also kann jemand bitte auf diesem bitte, wie ich das registrierte Zeichen in meiner URL senden kann? Ist das ein Problem in UrilBuilder?

Dank

EDIT Das wird mein Problem deutlich machen .. jetzt passieren i der Asset-Name £ ££££££ jetzt die Abfrage [ "ASSETNAME"] valueas den korrekten Wert erhalten .. aber innerhalb der Abfrage wird der Wert falsch codiert (wird nicht mit UTF8 kodiert) !!!

enter image description here

Antwort

4

Versuchen Sie folgendes:

url.Query = Uri.EscapeUriString(HttpUtility.UrlDecode(query.ToString())); 

Wie hier erwähnt HttpUtility.ParseQueryString() always encodes special characters to unicode

+0

Zugabe kann aber Sie beraten, was ist das Problem in meinem Fall? –

+2

Um eine korrekte URL (RFC3986-Standard) zu erstellen, sollten Sie [Uri.EscapeDataString] (https://msdn.microsoft.com/en-us/library/system.uri.escapedatastring.aspx) verwenden, ansonsten werden spezielle Unicode-Zeichen verwendet Standardmäßig codiert wie in Ihrer Frage. –

+0

Aber wenn ich "url.Query = query.ToString();" mit "Uri.EscapeUriString (HttpUtility.UrlDecode (query.ToString()));" werde ich irgendwelche Probleme haben ?? ... scheint jetzt mit "Uri.EscapeUriString (HttpUtility.UrlDecode (query.ToString()));" wird mein Problem für das "registrierte Zeichen" beheben, aber es wird dazu führen, dass andere Zeichen fehlschlagen ... –

0

Verwenden Uri.EscapeDataString() Daten zu entkommen (keine Sonderzeichen enthält), bevor es in die Query-String

+0

,,, So können Sie beraten, wie ich diese Methode in meinem Code verwenden kann ??? Sie wollen Uri.EscapeUriString ersetzen (HttpUtility.UrlDecode (query.ToString())); mit Uri.EscapeDataString (HttpUtility.UrlDecode (query.ToString())); –

+0

Abfrage ["osName"] = OperatingSystem; var url = new UriBuilder (apiurl); url.Query = Uri.EscapeDataString (Abfrage.ToString()); – Prado

+0

Sie müssen nicht verwenden HttpUtility.UrlDecode() – Prado