Implement http message handler factory to generate httpmessagehandler for each IHttpClient.

This commit is contained in:
Alexandru Macocian
2021-05-14 12:59:38 +02:00
parent f7d596bebd
commit 35db01d611
5 changed files with 71 additions and 20 deletions
@@ -0,0 +1,25 @@
using Microsoft.Extensions.Logging;
using System.Extensions;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
namespace WpfExtended.Tests.Http
{
public class HttpMessageLogger : DelegatingHandler
{
private readonly ILogger logger;
public HttpMessageLogger(ILogger logger, HttpMessageHandler innerHandler) : base(innerHandler)
{
this.logger = logger.ThrowIfNull(nameof(logger));
}
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
this.logger.LogInformation($"{request.Method} - {request.RequestUri}");
var response = await base.SendAsync(request, cancellationToken);
this.logger.LogInformation($"{response.RequestMessage.RequestUri} - {response.StatusCode}");
return response;
}
}
}
+19 -1
View File
@@ -1,7 +1,13 @@
using Slim;
using Microsoft.Extensions.Logging;
using Slim;
using System;
using System.Extensions;
using System.Http;
using System.Net.Http;
using System.Windows.Extensions;
using System.Windows.Extensions.Http;
using WpfExtended.Test;
using WpfExtended.Tests.Http;
namespace WpfExtended.Tests
{
@@ -15,6 +21,18 @@ namespace WpfExtended.Tests
return Instance.Run();
}
protected override void SetupServiceManager(IServiceManager serviceManager)
{
serviceManager.RegisterResolver(
new HttpClientResolver()
.WithHttpMessageHandlerFactory((sp, category) =>
{
var loggerType = typeof(ILogger<>).MakeGenericType(category);
var logger = sp.GetService(loggerType).As<ILogger>();
return new HttpMessageLogger(logger, new HttpClientHandler());
}));
}
protected override void ApplicationClosing()
{
}