代码之家  ›  专栏  ›  技术社区  ›  Bastien Vandamme

如何添加“content type=application/json;v=2.0”,包括使用httpclient进行版本控制?

  •  0
  • Bastien Vandamme  · 技术社区  · 5 年前

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

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

    我的api部分工作正常,我可以请求正确的版本,而不会对postman造成任何问题:

    enter image description here

    您看到这一行“content type=application/json;v=2.0”?邮递员没问题。用C的httpclient是不可能的。

    让我把我试过的所有解决方案都复制到这里。每次尝试新的解决方案时,我都会编辑这个问题。按设备,但更清楚的是,我将复制粘贴图像:

    解决方案1: 新内容为的扩展方法…

    enter image description here

    解决方案1b: 来自初学者特哈斯

    enter image description here

    解决方案1C: 从初学者Tejas开始,但现在使用MediaTypeWithQualityHeaderValue

    enter image description here

    解决方案2: 带有request.headers.add(…)的扩展方法

    enter image description here

    解决方案3: 带有client.defaultrequestheaders.tryaddwithoutvalidation(…)的BaseProxy 似乎我不能添加任何“内容类型”

    enter image description here

    解决方案4: 带有client.defaultrequestheaders.accept.add(…)的BaseProxy

    enter image description here

    解决方案5: request.headers.tryaddwithoutvalidation(“内容类型”,“应用程序/json”);

    enter image description here

    0 回复  |  直到 5 年前
        1
  •  0
  •   TejasGondalia    5 年前

    你能试试这个吗?

    request.Content.Headers.ContentType = new MediaTypeWithQualityHeaderValue( "application/json" )
    {
        Parameters = { new NameValueHeaderValue( "v", "2.0" ) }
    };
    
        2
  •  0
  •   Chris Martinez    5 年前

    你不能(或者至少 不应该 使用 Content-Type 当你不发送任何内容时。使用 Accept 报头 GET DELETE 这样的请求:

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

    如果同时指定了两个标题 内容类型 以前考虑过 接受 . 如果 接受 指定具有版本的多个媒体类型,其中 质量 是匹配的。不支持按请求混合版本(例如发送2.0,但接收1.0)。当前也不支持使用一个版本协商多个媒体类型(除了 质量 )