Как получить доступ к ProgressMessageHandler при создании HttpClient с помощью IHttpClientFactory в приложении WPF? ⇐ C#
-
Anonymous
Как получить доступ к ProgressMessageHandler при создании HttpClient с помощью IHttpClientFactory в приложении WPF?
Здесь у меня есть HttpClient, который сообщает о прогрессе:
var handler = new HttpClientHandler() {AllowAutoRedirect = true}; вар ph = новый ProgressMessageHandler (обработчик); ph.HttpReceiveProgress += (_, args) => { // Делаем то, что мне тоже хотелось бы сделать с помощью подхода DI. }; вар клиент = новый HttpClient (ph); client.BaseAddress = новый Uri("https://localhost:7145/"); HttpRequestMessage requestMessage = новый (HttpMethod.Get, «DownloadFile»); requestMessage.Headers.Authorization = новое AuthenticationHeaderValue («Носитель», _tokenConfig.AccessToken); вар ответ = ждут client.SendAsync(requestMessage); Этот код работает нормально, я могу читать ход загрузки, но теперь я хотел бы удалить инициализацию HttpClient из моего класса и вместо этого внедрить IHttpClientFactory, который есть у хороших людей в Microsoft предоставил. На данный момент я обнаружил, что могу настроить это в своем стартовом классе следующим образом:
services.AddTransient(); Services.AddHttpClient("api", opt => { opt.BaseAddress = new Uri(configuration.GetValue("HttpClientConfig:BaseUrl")); }) .AddHttpMessageHandler() .ConfigurePrimaryHttpMessageHandler(() => { вернуть новый HttpClientHandler() { Разрешитьавтоперенаправление = ложь, UseDefaultCredentials = true }; }); и внедряю куда хочу. Теперь мой вопрос: как и где я могу получить доступ к HttpReceiveProgress теперь, когда я использую подход DI:
var client = _httpClientFactory.CreateClient("api"); вместо первого более традиционного подхода?
Здесь у меня есть HttpClient, который сообщает о прогрессе:
var handler = new HttpClientHandler() {AllowAutoRedirect = true}; вар ph = новый ProgressMessageHandler (обработчик); ph.HttpReceiveProgress += (_, args) => { // Делаем то, что мне тоже хотелось бы сделать с помощью подхода DI. }; вар клиент = новый HttpClient (ph); client.BaseAddress = новый Uri("https://localhost:7145/"); HttpRequestMessage requestMessage = новый (HttpMethod.Get, «DownloadFile»); requestMessage.Headers.Authorization = новое AuthenticationHeaderValue («Носитель», _tokenConfig.AccessToken); вар ответ = ждут client.SendAsync(requestMessage); Этот код работает нормально, я могу читать ход загрузки, но теперь я хотел бы удалить инициализацию HttpClient из моего класса и вместо этого внедрить IHttpClientFactory, который есть у хороших людей в Microsoft предоставил. На данный момент я обнаружил, что могу настроить это в своем стартовом классе следующим образом:
services.AddTransient(); Services.AddHttpClient("api", opt => { opt.BaseAddress = new Uri(configuration.GetValue("HttpClientConfig:BaseUrl")); }) .AddHttpMessageHandler() .ConfigurePrimaryHttpMessageHandler(() => { вернуть новый HttpClientHandler() { Разрешитьавтоперенаправление = ложь, UseDefaultCredentials = true }; }); и внедряю куда хочу. Теперь мой вопрос: как и где я могу получить доступ к HttpReceiveProgress теперь, когда я использую подход DI:
var client = _httpClientFactory.CreateClient("api"); вместо первого более традиционного подхода?
Мобильная версия