Присоединение httpHandler к httpclientFactory webapi aspnetcore 2.1 - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь подключить обработчик к httpclientfactory, используя «ConfigurePrimaryHttpMessageHandler»

но когда я заглядываю внутрь HttpClient, чтобы увидеть если обработчик есть, я не могу его найти

Правильно ли я прикрепляю обработчик?

Любые предложения

     services.AddHttpClient<IGitHubClient,GitHubClient>(client =>
            {
                client.BaseAddress = new Uri(myUri);
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            })
            .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler
            {
                AllowAutoRedirect = false,
                AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip
            });


    public interface IGitHubClient
    {
        Task<string> GetData();
    }

    public class GitHubClient : IGitHubClient
    {
        private readonly HttpClient _client;

        public GitHubClient(HttpClient httpClient)
        {
            _client = httpClient;
        }

        public async Task<string> GetData()
        {
            return await _client.GetStringAsync("/");
        }
    }

    public class ValuesController : Controller
    {
        private readonly IGitHubClient _gitHubClient;;

        public ValuesController(IGitHubClient gitHubClient)
        {
            _gitHubClient = gitHubClient;
        }

        [HttpGet]
        public async Task<ActionResult> Get()
        {
            //my _gitHubClient has no Handler attached!!!

            string result = await _gitHubClient.GetData();
            return Ok(result);
        }
    }

1 Ответ

0 голосов
/ 26 июня 2018

Код, который вы показали, является рекомендуемым подходом.

Комментарий о _gitHubClient

// к моему _gitHubClient не подключен обработчик !!!

кажется недоразумением.

_gitHubClient - это ваша абстракция, которая упаковывает экземпляр HttpClient в его реализацию GitHubClient.

public class GitHubClient : IGitHubClient {
    private readonly HttpClient _client; //<< Handler will be attached to this instance

    public GitHubClient(HttpClient httpClient) {
        _client = httpClient;
    }

    public async Task<string> GetData() {
        return await _client.GetStringAsync("/");
    }
}

Это тот упакованный экземпляр, который будет иметь прикрепленный обработчик.

Исходя из текущей конфигурации, всякий раз, когда каркас должен создать экземпляр IGitHubClient производного GitHubClient для инъекции, фабрика создаст HttpClient с использованием настроек, предоставленных при запуске. Что также включает добавление HttpClientHandler, предоставленного ConfigurePrimaryHttpMessageHandler

...