【问题标题】:Refit - Dynamic AND Static Header改装 - 动态和静态标题
【发布时间】:2017-09-14 15:44:10
【问题描述】:

我正在使用Refit 并希望同时设置动态和静态标题。对于这个特定的调用,我需要设置 application/json 的内容类型(对于其他人,我不需要),但我还需要传递动态不记名令牌。

我收到 500 错误,似乎一个标题正在擦除另一个标题。

这是有效的,它会通过内容类型和授权:承载吗?

[Headers("Content-Type: application/json")]
[Post("api/myendpoint")]
Task<bool> GetUser([Body]int id, [Header("Authorization")] string bearerToken);

谢谢!

【问题讨论】:

  • 你好。你是怎么解决的。我有同样的问题。

标签: c# refit


【解决方案1】:

现在“改装”接受动态设置多个标题:

样本:

[Get("/users/{user}")]
Task<User> GetUser(string user, [HeaderCollection] IDictionary<string, string> headers);

var headers = new Dictionary<string, string> {{"Authorization","Bearer tokenGoesHere"}, {"X-Tenant-Id","123"}};
var user = await GetUser("octocat", headers);

【讨论】:

    【解决方案2】:

    试试这个:

    调用方法应该是这样的:

    var response = await GetUser(1,"Bearer <token>");
    

    我在这里找到了解决方案: https://github.com/reactiveui/refit/issues/693

    【讨论】:

      【解决方案3】:

      Refit 支持同时发送动态和静态标头。这是一个工作示例:

      public interface IHttpBinApi
      {
          [Headers("X-Foo: 123")]
          [Get("/headers")]
          Task<dynamic> GetHeaders([Header("X-Bar")] string bar);
      }
      
      // And in the consumer
      Console.WriteLine(await api.GetHeaders("bar"));
      

      将以下内容写入控制台:

      "{
        "headers": {
          "Connection": "close",
          "Host": "httpbin.org",
          "X-Bar": "bar",
          "X-Foo": "123"
        }
      }"
      

      如果您发现标头设置不正确,请raise an issue on Github 并最好提供一个小型重现项目供我们查看。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-25
        • 2019-07-04
        • 1970-01-01
        • 2022-01-25
        • 1970-01-01
        相关资源
        最近更新 更多