2013-09-29 7 views
6

Ich konvertiere einen Code von HttpWebRequest zu HttpClient. Ein Problem, das ich habe, ist, den Zeichensatz aus dem Inhalt-Antwort-Header zu bekommen.Wird der Inhaltstyp-Zeichensatz nicht von HttpResponseMessage verfügbar gemacht?

Wenn HttpWebRequest verwendet, wird der charset in der, wie diese können Sie auch von WebResponse.ContentType Eigentum oder aus den Content-Type-Header in HttpWebResponse.Headers um es zu bekommen

using (WebResponse response = await this.webRequest.GetResponseAsync()) 
{ 
    string characterSet = ((HttpWebResponse)response).CharacterSet; 

HttpWebResponse.CharacterSet Eigenschaft ausgesetzt.

Mit HttpClient scheint der Zeichensatz aus dem Header ContentType zu fehlen.

Hier ist der Code, den ich für HttpClient bin mit:

using (HttpClient httpClient = new HttpClient(httpClientHandler)) 
{ 
    using (HttpResponseMessage httpResponseMessage = await httpClient.GetAsync(uri, HttpCompletionOption.ResponseContentRead)) 
    { 
     charset = httpResponseMessage.Content.Headers.ContentType.CharSet; 

Die CharSet Eigenschaft immer null ist. HttpResponseMessage hat eine Headers -Eigenschaft, aber es enthält nicht den Content-Type-Header. HttpResponseMessage.Content hat auch eine Headers-Eigenschaft, die anscheinend den Content-Type-Header enthält, aber dieser Header zeigt "Content-Type: text/html" - es hat nicht den Zeichensatzabschnitt.

Mit dem ersten Ansatz mit HttpWebResponse für die gleiche URL, bekomme ich die Charset-Teil der Content-Type-Header. Fehle ich etwas?

+0

Hey, willkommen Überlauf zu stapeln. Zu Ihrer Information, Sie können Dinge wie "HttpResponseMessage" wörtlich drucken, indem Sie sie in Backticks '' einschließen. –

Antwort

0

Ich glaube, die Content-Type -Header, die vom Server zurückgegeben wird, müsste den "Zeichensatz" wie 'text/html;charset=UTF-8' enthalten, damit er in der CharSet Eigenschaft angezeigt wird. Überprüfen Sie die rohe Antwort in einem Tool wie Fiddler (http://www.telerik.com/fiddler) kann helfen.

Und danke, dass Sie mir geholfen haben, zu finden, wo der Content-Type Header im HttpResponseMessage Objekt begraben wurde!

0

HttpClient stellt absichtlich keinen Zeichensatz zur Verfügung. Genau kann es nicht. Es ist asynchron, dh wenn es sich mit einem Server verbindet, wartet es bis zur Antwort. Es ist nicht bekannt, Charset oder etwas anderes als TransferEncoding in HttpResponseMessage, die nichts außer "Chunk" oder "Zip" enthält.

Um eine Codierung des Antworttextkörpers zu erhalten, sollten wir ihn in eine Variable lesen und dann gründlich suchen.

0

Ich war auf der Suche die charset in einem HttpResponseMessage und da Ihre Frage zu emittieren ist die erste auf Google und dass ich die Antwort mehr Seiten unten gefunden, hier ist der Code

 httpResponseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("text/csv"); 
     httpResponseMessage.Content.Headers.ContentType.CharSet = Encoding.UTF8.HeaderName; 
     httpResponseMessage.Content.Headers.Add("CodePage", Encoding.UTF8.CodePage.ToString()); 
Verwandte Themen