Как настроить User-Agent во время выполнения с refit?

Если мой пользовательский агент является постоянной строкой, я могу использовать [Headers("User-Agent: Awesome Octocat App")] установить это.

Тем не менее, Мой пользовательский агент генерируется методом (потому что он включает в себя версию устройства и ОС), что означает, что я не могу поместить его в Headers приписывать.

Другой упомянутый метод такой же, как описанный в разделе " Динамические заголовки ", который менее чем оптимален, поскольку для меня это глобальный заголовок. Я бы предпочел не добавлять этот заголовок вручную в более 60 методов API.

Как бы я поступил так? Это поддерживаемый сценарий? Использование настраиваемого HttpClient является приемлемым решением (если возможно).

Я также открыт для других подобных продуктов, если вы знаете, что-либо, что может служить моей цели.

1 ответ

Решение

Чтобы установить заголовки по умолчанию во время выполнения, вы можете использовать DefaultRequestHeaders собственность на HttpClient пример.

Примерно так будет работать:

// 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();
}
Другие вопросы по тегам