【发布时间】:2019-09-05 04:51:41
【问题描述】:
很抱歉这样问这个问题。我可以给你一种我希望你为我编写代码的感觉。我已经花了一天时间编写代码以发送包含带有版本控制的标头的 http 请求:
对于版本控制,我使用来自 Microsoft/aspnet-api-versioning 项目的 versioning by Media Type。
我的 API 部分工作正常,我可以通过 Postman 请求正确的版本:
您看到“Content-Type = application/json;v=2.0”这一行了吗?在邮递员上没问题。使用 C# 中的 HttpClient 是不可能的。
让我在这里复制所有我尝试过的错误解决方案。每次尝试新解决方案时,我都会编辑此问题。方便起见,但为了更清楚,我将复制粘贴图像:
解决方案 1: 带有 new Content = ... 的扩展方法
解决方案 1B: 来自初学者Tejas
解决方案 1C: 来自 BeginnerTejas,但现在使用 MediaTypeWithQualityHeaderValue
解决方案 2: 带有 request.Headers.Add(...) 的扩展方法
解决方案 3: BaseProxy 与 Client.DefaultRequestHeaders.TryAddWithoutValidation(...) 看来我无法添加任何“Content-Type”
解决方案 4: BaseProxy 与 Client.DefaultRequestHeaders.Accept.Add(...)
解决方案 5: request.Headers.TryAddWithoutValidation("Content-Type", "application/json");
【问题讨论】:
-
你试过ApiVersion属性吗?
-
ApiVersion 属性用于服务器端。是的,我所有的 API 都使用 [ControllerName("Client")] 然后 [ApiVersion("2.0")] 类似的设置。同样,服务器工作正常。我可以从 Postman 发送我的所有请求。问题是如何使用 HttpClient 添加标头?
-
有什么解决办法吗?
标签: c# .net asp.net-web-api2 aspnet-api-versioning