2

很抱歉这样问这个问题。我可以给你一种我希望你为我编写代码的感觉。我已经花了一天时间编写代码以发送包含带有版本控制的标头的 http 请求:

对于版本控制,我使用来自 Microsoft/aspnet-api-versioning 项目的媒体类型的版本控制。

我的 API 部分工作正常,我可以使用 Postman 请求正确的版本而不会出现问题:

在此处输入图像描述

您看到这一行“Content-Type = application/json;v=2.0”了吗?在邮递员上没问题。使用 C# 中的 HttpClient 是不可能的。

让我在这里复制我尝试过的所有错误解决方案。每次尝试新解决方案时,我都会编辑此问题。通过设施,但为了更清楚,我将复制粘贴图像:

解决方案 1:使用 new Content = ... 的扩展方法

在此处输入图像描述

解决方案 1B:来自 BeginnerTejas

在此处输入图像描述

解决方案 1C:来自 BeginnerTejas,但现在使用 MediaTypeWithQualityHeaderValue

在此处输入图像描述

解决方案 2:使用 request.Headers.Add(...) 的扩展方法

在此处输入图像描述

解决方案 3:带有 Client.DefaultRequestHeaders.TryAddWithoutValidation(...) 的 BaseProxy 似乎我无法添加任何“Content-Type”

在此处输入图像描述

解决方案 4:BaseProxy 与 Client.DefaultRequestHeaders.Accept.Add(...)

在此处输入图像描述

解决方案5:request.Headers.TryAddWithoutValidation("Content-Type", "application/json");

在此处输入图像描述

4

2 回答 2

1

你能试试这个吗?

request.Content.Headers.ContentType = new MediaTypeWithQualityHeaderValue( "application/json" )
{
    Parameters = { new NameValueHeaderValue( "v", "2.0" ) }
};
于 2019-04-15T08:52:12.310 回答
0

当您不发送任何内容时,您不能(或至少不应该)使用。Content-Type使用Accept标头GETDELETE请求,如下所示:

request.Headers.Accept.Add(MediaTypeWithQualityHeaderValue.Parse("application/json; v=2.0"));

如果同时指定了两个标题,则Content-Type在之前考虑Accept。如果Accept在一个版本中指定多种媒体类型,则匹配质量最高的媒体类型。不支持每个请求的混合版本(例如发送 2.0,但接收 1.0)。当前也不支持使用版本协商多种媒体类型(除了quality)。

于 2019-04-15T14:09:00.157 回答