很抱歉问这个问题。我已经花了一天的时间来编写发送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”);

发布于 2019-04-15 16:52:12
你能试试这个吗?
request.Content.Headers.ContentType = new MediaTypeWithQualityHeaderValue( "application/json" )
{
Parameters = { new NameValueHeaderValue( "v", "2.0" ) }
};发布于 2019-04-15 22:09:00
当你不发送任何内容时,你不能(或者至少不应该)使用Content-Type。对GET和DELETE请求使用Accept标头,如下所示:
request.Headers.Accept.Add(MediaTypeWithQualityHeaderValue.Parse("application/json; v=2.0"));如果同时指定了两个标头,则在Accept之前考虑Content-Type。如果Accept为一个版本指定了多个媒体类型,则匹配质量最高的媒体类型。不支持混合每个请求的版本(例如,发送2.0,但接收1.0)。目前还不支持与一个版本协商多种媒体类型(质量除外)。
https://stackoverflow.com/questions/55685234
复制相似问题