Is the Content-Type charset not exposed from HttpResponseMessage?
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!
Related videos on Youtube
user2104834
Updated on September 15, 2022Comments
-
user2104834 over 1 year
I'm converting some code from using
HttpWebRequest
toHttpClient
. One problem I'm having is getting the charset from the content-type response header.When using
HttpWebRequest
, the charset is exposed in theHttpWebResponse.CharacterSet
property, like thisusing (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 inHttpWebResponse.Headers
.Using
HttpClient
, the charset seems to be missing from theContentType
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 aHeaders
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?