首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何添加"Content-Type = application/json;v=2.0“,包括使用HttpClient的版本控制?

如何添加"Content-Type = application/json;v=2.0“,包括使用HttpClient的版本控制?
EN

Stack Overflow用户
提问于 2019-04-15 16:30:10
回答 2查看 3.5K关注 0票数 2

很抱歉问这个问题。我已经花了一天的时间来编写发送http请求的代码,该请求包含一个带有版本控制的头文件:

对于版本控制,我使用来自Microsoft/aspnet-api-versioning项目的versioning by Media Type

我的API部分工作正常,我可以用Postman请求正确的版本:

你看到这行"Content-Type = application/json;v=2.0“了吗?邮递员没问题。使用来自C#的HttpClient是不可能的。

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

解决方案1:带有新内容的扩展方法= ...

解决方案1B:来自BeginnerTejas

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

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

解决方案3:使用Client.DefaultRequestHeaders.TryAddWithoutValidation(...)的BaseProxy

解决方案4:使用Client.DefaultRequestHeaders.Accept.Add的BaseProxy (...)

解决方案5: request.Headers.TryAddWithoutValidation("Content-Type",“应用程序/json”);

EN

回答 2

Stack Overflow用户

发布于 2019-04-15 16:52:12

你能试试这个吗?

代码语言:javascript
复制
request.Content.Headers.ContentType = new MediaTypeWithQualityHeaderValue( "application/json" )
{
    Parameters = { new NameValueHeaderValue( "v", "2.0" ) }
};
票数 1
EN

Stack Overflow用户

发布于 2019-04-15 22:09:00

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

代码语言:javascript
复制
request.Headers.Accept.Add(MediaTypeWithQualityHeaderValue.Parse("application/json; v=2.0"));

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55685234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档