[英]Can't set Content-Type header on HttpResponseMessage headers?
[英]Is the Content-Type charset not exposed from HttpResponseMessage?
我正在將一些代碼從使用HttpWebRequest
轉換為HttpClient
。 我遇到的一個問題是從內容類型響應 header 獲取字符集。
使用HttpWebRequest
時,字符集在HttpWebResponse.CharacterSet
屬性中公開,如下所示
using (WebResponse response = await this.webRequest.GetResponseAsync())
{
string characterSet = ((HttpWebResponse)response).CharacterSet;
您還可以從WebResponse.ContentType
屬性或從HttpWebResponse.Headers
中的內容類型 header 獲取它。
使用HttpClient
時, ContentType
header 中似乎缺少字符集。
這是我用於HttpClient
的代碼:
using (HttpClient httpClient = new HttpClient(httpClientHandler))
{
using (HttpResponseMessage httpResponseMessage = await httpClient.GetAsync(uri, HttpCompletionOption.ResponseContentRead))
{
charset = httpResponseMessage.Content.Headers.ContentType.CharSet;
CharSet 屬性始終為null
。 HttpResponseMessage
有一個Headers
屬性,但它不包含內容類型HttpResponseMessage.Content
也有一個 Headers 屬性,它似乎包含內容類型 header,但 header 顯示"Content-Type: text/html"
- 它沒有字符集部分。
對同一個 url 使用HttpWebResponse
的第一種方法,我得到了 Content-Type header 的字符集部分。我錯過了什么嗎?
我想在 HttpResponseMessage 中發出字符集,因為你的問題是谷歌上的第一個問題,我在下面幾頁找到了答案,這里是代碼
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());
您可以通過以下方式獲取:
var contentType = response.Content.Headers.GetValues("Content-Type").First());
我相信從服務器返回的Content-Type
標頭必須包含像'text/html;charset=UTF-8'
這樣的'text/html;charset=UTF-8'
,以便它顯示在CharSet
屬性中。 在像 Fiddler ( http://www.telerik.com/fiddler ) 這樣的工具中檢查原始響應可能會有所幫助。
感謝您幫助我找到HttpResponseMessage
對象中Content-Type
標頭的位置!
HttpClient 有意不公開字符集。 確切地說,它不能。 它是異步的,所以當它連接到服務器時,它會等待直到響應。 它不知道字符集或除 HttpResponseMessage 中的 TransferEncoding 之外的任何其他內容,它不包含除“chunk”或“zip”之外的任何內容。
因此,要獲得響應主體的編碼,我們應該將其讀取到變量中,然后仔細查看。
由於 Content-Type 可以是類型數組,您可能想檢查其中任何一個的有效性,但這是假設服務器編寫正確並且不會混合類型和字符集
var isJson = response.Content.Headers.GetValues("Content-Type").Any(x=>x.Contains("json"));
var isCharsetUTF8 = response.Content.Headers.GetValues("Content-Type").Any(x=>x.Contains("charset=UTF-8"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.