亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

HttpClient請求中怎么設置Content-Type標頭

發布時間:2021-07-27 14:14:15 來源:億速云 閱讀:700 作者:Leah 欄目:web開發

本篇文章給大家分享的是有關HttpClient請求中怎么設置Content-Type標頭,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

POST   /open-api/v1/user-info?client_id&timstamp&rd=12345&sign=***&method=hmac content-type: application/json payload: { "token":"AA2917B0-C23D-40AB-A43A-4C4B61CC7C74"}

HttpClient請求中怎么設置Content-Type標頭

平臺顯示 :簽名校驗失敗, 排查到平臺收到的Post Payload并非預期,閱讀本文,解鎖正確使用Content-Type標頭的姿勢。

1. 入坑

下面是構造HttpClient對象、發起請求的代碼:

// 初始化HttpClientFactory context.Services.AddHttpClient("platform", c => {     c.BaseAddress = new Uri("https://alpha-engage.demohost.com/");     c.DefaultRequestHeaders.Accept     .Add(new MediaTypeWithQualityHeaderValue("application/json")); })...  // 產生命名HttpClient,發起請求  var client = _clientFactory.CreateClient("platform");  var response = await client.PostAsync($"open-api/v1/user-token/info?{req.AuthString()}",new StringContent(req.ReqPayload.ToString(),Encoding.UTF8) );

平臺日志顯示,收到的請求payload:

{\"token\":\"AA2917B0-C23D-40AB-A43A-4C4B61CC7C74\"}

額,平臺收到的JSON數據被轉碼了,沒有識別出JSON?

明眼人一看,HttpClient請求沒有設置Content-Type,接收端沒有識別出JSON 格式的payload ,  進行了轉碼,生成了錯誤簽名。

① Content-Type是一個Entity Header,指示資源的mediaType ,可用在請求/響應中

② 代碼中new StringContent(req.ReqPayload.ToString(),Encoding.UTF8)  沒有指定mediaType參數,故函數會使用text/plain默認值

------------------------------------------

當我嘗試添加Content-Type時(下面黃色背景行代碼):

context.Services.AddHttpClient("platform", c => {     c.BaseAddress = new Uri("https://alpha-engage.demohost.com/");     c.DefaultRequestHeaders.Accept          .Add(new MediaTypeWithQualityHeaderValue("application/json"));//ACCEPT header     c.DefaultRequestHeaders.Add("content-type", "application/json"); })

此時拋出以下異常:

InvalidOperationException: Misused header name. Make sure request headers are used with HttpRequestMessage, response headers with HttpResponseMessage, and content headers with HttpContent objects.

納尼,HttpContent Headers是啥?Chrome dev tools顯示只有兩種Header啊?

HttpClient請求中怎么設置Content-Type標頭

2. 爬坑

---信息舉例.NET類型
General Header可同時作用在請求/響應中,但是與傳輸數據無關Upgrade、Connection---
Request Header將要獲取的資源或客戶端本身的信息Accept、
Authorization
HttpRequestHeaders
Response Header響應信息Location、ETagHttpResponseHeaders
Entity
Header
實體Body額外的信息Content-Length、
Connection
HttpContentHeaders

Content-Type屬于Entity Header的一種,對應.NET類型 HttpContent Header;

雖然Entity Header不是請求標頭也不是響應標頭,它們還是會包含在請求/響應標頭術語中(此說法來自官方)。

所以我們在Chrome DevTools沒有看到Entity Headers分組, 卻常在請求/響應標頭中看到Content-Type標頭。

回到上面的異常,.NET 嚴格區分四種標頭,所以c.DefaultRequestHeaders.Add("content-type",  "application/json")  嘗試將content-type添加到請求頭,姿勢不正確,.NET提示InvalidOperationException。

3. 填坑

給這個常規的Post請求設置正確的Content-Type標頭。

方法① 對HttpRequestMessage對象Content屬性添加Header

 using (var request = new HttpRequestMessage()) {      request.Method = new HttpMethod(method);      request.RequestUri = new Uri(url);      request.Content = new StringContent(payload);      request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");      var response = await _httpClient.SendAsync(request);      return response; }

使用HttpClient.SendAsync(request)

方法② 寫入HttpContent時傳入媒體類型

StringContent某個重載構造函數 : 參數3 可直接設置media type,

var response = await client.PostAsync($"open-api/v1/user-token/info?{req.AuthString()}",new StringContent(req.ReqPayload.ToString(),Encoding.UTF8,"application/json") );

以上就是HttpClient請求中怎么設置Content-Type標頭,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

琼结县| 普安县| 枣阳市| 图片| 修文县| 马龙县| 临邑县| 阳朔县| 西峡县| 吴旗县| 碌曲县| 张掖市| 克山县| 乌兰县| 青河县| 天镇县| 涟水县| 怀化市| 子长县| 安西县| 舞阳县| 乡城县| 青海省| 吉林市| 新兴县| 嘉荫县| 无极县| 平利县| 许昌县| 大同市| 合川市| 仪征市| 泸溪县| 深泽县| 英山县| 栾城县| 吴堡县| 抚松县| 武陟县| 平塘县| 台东市|