Frage

Ich baue einen einfachen Server, dass Anwendungen auf Prozessanforderungen HttpListener. Die Abfrage-String-Parameter ich es schicken sind url bei Bedarf codiert. Um zum Beispiel des Kanji-String "尺八" zu senden, die Codierung "%E5%B0%BA%E5%85%AB".

Meine Beispiel-URL, dann ist "/?q=%E5%B0%BA%E5%85%AB".

In meinem Zusammenhang Rückruf, ich habe:

HttpListenerContext context = Listener.EndGetContext();
string rawUrl = context.Request.RawUrl;
string query = context.Request.QueryString["q"];

die Ergebnisse prüfen, erhalte ich:

rawUrl = "/?q=%E5%B0%BA%E5%85%AB" 
query = "尺八"

Aber wenn ich an context.Request.Url aussehen, ich {http://localhost:8080/?q=尺八}.

Es sieht aus wie die Abfrage-String in context.Request.QueryString decodiert werden einige kodiert andere als UTF-8 verwendet wird.

Meine Abhilfe ist context.Request.QueryString zu ignorieren und meine eigenen erstellen, indem dies zu tun:

var queryString = HttpUtility.ParseQueryString(context.Request.Url.Query);

Das gibt mir den richtigen Wert, aber es scheint, wie so etwas wie ein Hack.

Gibt es eine Möglichkeit, der HttpListener (oder den Kontext oder die Anfrage) zu sagen, den Query-String als UTF-8 zu interpretieren, was ich denke, der Standard überhaupt? Oder sollte ich mit dieser Problemumgehung nur leben?

War es hilfreich?

Lösung

Mit Blick auf den Code, stützt sie sich auf Contenten sein Set zu UTF8. Hier ist die snipit von der Abfrage-Zeichenfolge-Eigenschaft HttpListenerRequest:

public NameValueCollection QueryString
{
    get
    {
        NameValueCollection nvc = new NameValueCollection();
        Helpers.FillFromString(nvc, this.Url.Query, true, this.ContentEncoding);
        return nvc;
    }
}

Da gibt es keine Möglichkeit, die Contenten Eigenschaft Ihre stecken mit Ihrem ‚Hack‘ zu ändern. Wie dem auch sei, ich denke, die Nutzung von HttpUtility.ParseQueryString ist wahrscheinlich, dass Sie das Beste dienen gehen.

Andere Tipps

Versuchen System.Web.HttpUtility

 string query = "d=bla bla bla";
 string encoded = System.Web.HttpUtility.UrlEncode( query, System.Text.Encoding.UTF8 );

Weitere Informationen https: //msdn.microsoft.com/en-us/library/system.web.httputility(v=vs.110).aspx

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