Bootstrap

C# .NetCore HttpClient 标题名称 Content-Type、content-md5、Accept误用 确保请求头与HttpRequestMessage一起使用

异常消息:

        异常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 调用的正确性和数据完整性。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。 

;