广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >HttpClient请求中怎么设置Content-Type标头
  • 199
分享到

HttpClient请求中怎么设置Content-Type标头

httpclientcontent-type 2022-10-19 06:10:49 199人浏览 安东尼
摘要

本篇文章给大家分享的是有关HttpClient请求中怎么设置Content-Type标头,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。POST

本篇文章给大家分享的是有关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标头,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网node.js频道。

--结束END--

本文标题: HttpClient请求中怎么设置Content-Type标头

本文链接: https://www.lsjlt.com/news/75683.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • HttpClient请求中怎么设置Content-Type标头
    本篇文章给大家分享的是有关HttpClient请求中怎么设置Content-Type标头,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。POST...
    99+
    2022-10-19
    httpclient content-type
  • axios怎么配置请求头content-type
    今天小编给大家分享一下axios怎么配置请求头content-type的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。开始因为...
    99+
    2023-06-30
  • vue-resouce中怎么设置请求头
    本篇文章为大家展示了vue-resouce中怎么设置请求头,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。第一种:在Vue实例中设置var vm ...
    99+
    2022-10-19
  • Vue怎么为GET或POST请求设置请求头
    这篇文章主要介绍了Vue怎么为GET或POST请求设置请求头的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue怎么为GET或POST请求设置请求头文章都会有所收获,下面我们一起来看看吧。为GET或POST请求...
    99+
    2023-06-29
  • Node.js中怎么设置CORS跨域请求
    这篇文章将为大家详细讲解有关Node.js中怎么设置CORS跨域请求,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。CORS说到CORS,相信前端儿都不陌生,...
    99+
    2022-10-19
    node.js cors
  • axios中怎么设置全局请求参数
    这篇文章将为大家详细讲解有关axios中怎么设置全局请求参数,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。应用场景:1,每个请求都带上的参数,比如token...
    99+
    2022-10-19
    axios
  • vue中同步和异步请求怎么设置
    本篇内容介绍了“vue中同步和异步请求怎么设置”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、什么是同步请求在前端开发中,我们通常使用异步...
    99+
    2023-07-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作