.net 如何增加“内容类型=应用程序/json; v=2.0”包括使用HttpClient进行版本控制?

rur96b6h  于 2022-12-01  发布在  .NET
关注(0)|答案(2)|浏览(93)

很抱歉这样问这个问题。我可以给你的感觉我希望你为我做代码。我已经花了一天的时间来编写代码发送一个http请求,其中包含一个带有版本控制的头:
对于版本控制,我使用来自Microsoft/aspnet-api-versioning项目的versioning by Media Type
我的API部分工作正常,我可以请求正确的版本没有问题的 Postman :

您会看到下面这行“内容类型=应用程序/json; v=2.0”?在 Postman 上没有问题。用C#的HttpClient不可能做到。
让我复制粘贴在这里所有的解决方案,我尝试与他们的错误。我将编辑这个问题,每次我尝试一个新的解决方案。通过设施,但也更清楚,我将复制粘贴图像:
解决方案1:具有新内容的扩展方法=...

溶液1B:来自初学者Tejas

溶液1C:来自BeginnerTejas,但现在使用具有质量标头值的媒体类型

解决方案2:扩展方法用request.Headers.Add(...)
x1c4d 1x指令集
解决方案3:带有客户端的BaseProxy。DefaultRequestHeaders。TryAddWithoutValidation(...)似乎无法添加任何“内容类型”

解决方案4:带有客户端的BaseProxy。默认请求头。接受。添加(...)


指令集
解决方案5:请求.头.TryAddWithoutValidation(“内容类型”,“应用程序/json”);

ruarlubt

ruarlubt1#

你能试试这个吗?

request.Content.Headers.ContentType = new MediaTypeWithQualityHeaderValue( "application/json" )
{
    Parameters = { new NameValueHeaderValue( "v", "2.0" ) }
};
rn0zuynd

rn0zuynd2#

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

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

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

相关问题