8

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

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

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

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

谢谢!

4

3 回答 3

8

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"
  }
}"

如果您发现标头设置不正确,请在 Github 上提出问题,最好提供一个小型重现项目供我们查看。

于 2017-09-12T20:53:20.360 回答
2

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

样本:

[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);
于 2020-12-10T13:47:18.093 回答
1

尝试这个 :

调用方法应该是这样的:

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

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

于 2019-08-23T09:05:20.040 回答