我正在使用Refit,并希望同时设置动态AND静态标头。对于这个特定的调用,我需要设置application / json的内容类型(对于其他人,我没有),但我还需要传递一个动态的承载令牌。
我收到500错误,看起来好像一个标题正在擦除另一个。
这是否有效,是否会通过内容类型和授权:bearer?
[Headers("Content-Type: application/json")]
[Post("api/myendpoint")]
Task<bool> GetUser([Body]int id, [Header("Authorization")] string bearerToken);
谢谢!
答案 0 :(得分: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,理想情况下提供一个我们可以查看的小型repro项目。
答案 1 :(得分:1)
尝试一下:
调用方法应类似于:
var response = await GetUser(1,"Bearer <token>");
我在这里找到了解决方案: https://github.com/reactiveui/refit/issues/693
答案 2 :(得分:0)
现在“ Refit”接受动态设置多个标题:
样本:
[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);