如何在运行时使用refit设置用户代理?

5
如果我的用户代理是一个固定的字符串,我可以使用[Headers("User-Agent: Awesome Octocat App")]来设置它。
然而,我的用户代理是由一个方法生成的(因为它包括设备和操作系统版本),这意味着我无法将其放在Headers属性中。
另一种方法是在动态标头部分所述的方法,但这不是最佳选择,因为这对我来说是全局标头。我不想手动将此标头添加到60多个API方法中。
我该如何解决这个问题?这是一个支持的场景吗? 如果可能的话,使用自定义HttpClient是可行的解决方案。
如果您知道任何其他类似的产品,我也很乐意尝试。

根据此链接(https://github.com/paulcbetts/refit),应该是可能的。我无法理解其明确的用法。也许需要更多的解释才能给出答案。 - Sanket Tarun Shah
是的,我也看到了,我在问题中添加了一些内容,解释了为什么那不是一个理想的解决方案。 - copolii
1个回答

8
为了在运行时设置默认标头,您可以使用HttpClient实例上的DefaultRequestHeaders属性。
类似以下代码将起作用:
// This example uses http://httpbin.org/user-agent, 
// which just echoes back the user agent from the request.
var httpClient = new HttpClient
{
    BaseAddress = new Uri("http://httpbin.org"), 
    DefaultRequestHeaders = {{"User-Agent", "Refit"}}
};
var service = RestService.For<IUserAgentExample>(httpClient);
var result = await service.GetUserAgent(); // result["user-agent"] == "Refit"

// Assuming this interface
public interface IUserAgentExample
{
    [Get("/user-agent")]
    Task<Dictionary<string, string>> GetUserAgent();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接