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?
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());
You can get it this way:
var contentType = response.Content.Headers.GetValues("Content-Type").First());
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With