异常消息:
异常1、Misused header name, 'Content-Type'. Make sure request headers are used with HttpRequestMessage, response headers with HttpResponseMessage, and content headers with HttpContent objects
大概意思:标题名称“Content-Type”误用。确保请求头与HttpRequestMessage一起使用,响应头与HttpResponseMessage一起使用以及内容头与HttpContent对象一起使用
Content-Type不能添加HttpClient默认请求头中,需要使用HttpContent与HttpResponseMessage配合完成请求头,删除异常代码,改写代码如下:
再次调试运行代码即可解决上面的异常。
异常2、Misused header name, 'content-md5'. Make sure request headers are used with HttpRequestMessage, response headers with HttpResponseMessage, and content headers with HttpContent objects.”
大概意思:标题名称“content-md5”误用。确保请求头与HttpRequestMessage一起使用,响应头与HttpResponseMessage一起使用以及内容头与HttpContent对象一起使用。”
修改代码与上面问题基本一致:
示例:httpContent.Headers.Add("content-md5", "adminsnsdfgfv");
修改代码后,在调试运行即可解决上面的异常。
异常3、Misused header name, 'Accept'. Make sure request headers are used with HttpRequestMessage, response headers with HttpResponseMessage, and content headers with HttpContent objects
大概意思:标题名称“Accept”被误用。确保请求头与HttpRequestMessage一起使用,响应头与HttpResponseMessage一起使用以及内容头与HttpContent对象一起使用
上面这个错误,需要将Accept设置到HttpClient默认请求头中,如下图:
代码:
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(contentType));
修改后调试程序一切正常。
请求头一些设置说明描述:
在使用 `HttpClient` 进行 HTTP 请求时,设置 `Content-Type`、`Accept` 和 `Content-MD5` 这三个头部虽然都是与内容处理相关的,但它们的用法和目的有所不同。这些头部在请求中执行不同的角色,它们的设置位置和方式也不同。
1. Content-Type
定义: `Content-Type` 头部用于指定请求体(如 POST、PUT 等)的媒体类型。它告诉服务器内容的格式是什么,以便服务器能正确解析请求体。
设置位置: `Content-Type` 是与 `HttpContent` 相关的,可以在创建 `HttpContent` 时设置。
var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
示例:
JSON 格式: `application/json`
表单数据: `application/x-www-form-urlencoded`
XML 格式: `application/xml`
2. Accept
定义: `Accept` 头部用于指定客户端能够处理的响应内容的媒体类型。它告诉服务器客户端希望接收哪种格式的响应。
设置位置: `Accept` 头部是属于请求的 HTTP 头部之一,设置在 `HttpClient.DefaultRequestHeaders` 中。
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
示例:
客户端希望接收 JSON 响应: `application/json`
客户端希望接收 XML 响应: `application/xml`
3.Content-MD5
定义: `Content-MD5` 头部用于提供请求体的 MD5 摘要,以说明请求体的完整性和准确性。这可以帮助接收方验证请求体在传输过程中是否未被修改。
设置位置: `Content-MD5` 通常不是由 `HttpContent` 自动设置的,而是需要手动计算和设置。该头部需要在请求的 `HttpRequestMessage` 中设置。
var md5 = MD5.Create();
var contentBytes = Encoding.UTF8.GetBytes(jsonData);
byte[] hash = md5.ComputeHash(contentBytes);
string md5Base64 = Convert.ToBase64String(hash);
request.Headers.Add("Content-MD5", md5Base64);
示例:
发送请求体的 MD5 校验和以确保数据未被篡改。
解释说明:
`Content-Type`: 指定请求体的格式 。由 `HttpContent` 设置。
`Accept`: 指定客户端希望接收的响应格式。由 `HttpClient` 的请求头设置。
`Content-MD5`: 提供请求体的 MD5 校验和以确保请求内容的完整性。通常手动计算并以建筑样式添加到请求头。
在使用 `HttpClient` 时,根据需要选择合适的头部设置和处理方式,以确保 API 调用的正确性和数据完整性。
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。
标签:Content,请求,NetCore,C#,Type,Accept,content,HttpContent,MD5 From: https://blog.csdn.net/hefeng_aspnet/article/details/144908170