Is the Content-Type charset not exposed from HttpResponseMessage?

13,989

Solution 1

I was looking to emit the charset inside a HttpResponseMessage and since your question is the first on google and that i found the answer several pages below, here is the 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());

Solution 2

You can get it this way:

var contentType = response.Content.Headers.GetValues("Content-Type").First());

Solution 3

I believe the Content-Type header returned from the server would have to contain the 'charset' like 'text/html;charset=UTF-8' in order for it to show up in the CharSet property. Checking the raw response in a tool like Fiddler (http://www.telerik.com/fiddler) may help.

And thanks for helping me find where the Content-Type header was buried in the HttpResponseMessage object!

Share:
13,989

Related videos on Youtube

user2104834
Author by

user2104834

Updated on September 15, 2022

Comments

  • user2104834
    user2104834 over 1 year

    I'm converting some code from using HttpWebRequest to HttpClient. One problem I'm having is getting the charset from the content-type response header.

    When using HttpWebRequest, the charset is exposed in the HttpWebResponse.CharacterSet property, like this

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

    You can also get to it from WebResponse.ContentType property or from the content-type header in HttpWebResponse.Headers.

    Using HttpClient, the charset seems to be missing from the ContentType header.

    Here's the code that I'm using for HttpClient:

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

    The CharSet property is always null. HttpResponseMessage has a Headers property but it doesn't contain the content-type header. HttpResponseMessage.Content also has a Headers property, which does appear to contain the content-type header, but that header shows "Content-Type: text/html" - it doesn't have the charset portion.

    Using the first approach with HttpWebResponse for the same url, I get the charset portion of the Content-Type header. Am I missing something?