Basit Bir Rest Api Client Geliştirelim 9
2023-05-14
HTTP isteklerini izlemek ve teşhis etmek için daha fazla yetenek ekleyerek, kütüphanemizi daha da geliştirebiliriz. Bu amaçla, isteklerin ve yanıtların bazı temel bilgilerini loga kaydeden bir middleware ekleyelim.
Bu özellik, HTTP isteklerinin ve yanıtlarının kaydını tutmak için HttpClient
‘in DelegatingHandler
sınıfını kullanır. Bu, bir HTTP isteği gönderildiğinde ve bir yanıt alındığında çalışan bir kod parçasıdır. Bu durumda, HTTP isteklerinin ve yanıtlarının bazı temel bilgilerini loga kaydeder.
Aşağıda, bu özelliği eklemek için gereken kod parçacığı bulunmaktadır:
public class LoggingHandler : DelegatingHandler
{
private readonly ILogger<LoggingHandler> _logger;
public LoggingHandler(ILogger<LoggingHandler> logger)
{
_logger = logger;
}
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
_logger.LogInformation($"Sending request to {request.RequestUri}.");
var response = await base.SendAsync(request, cancellationToken);
if (response.IsSuccessStatusCode)
{
_logger.LogInformation($"Received response from {request.RequestUri}.");
}
else
{
_logger.LogError($"Received HTTP {response.StatusCode} from {request.RequestUri}.");
}
return response;
}
}
Bu LoggingHandler
‘i kullanmak için, MyHttpClient
‘in yapıcısına eklememiz gerekiyor:
public MyHttpClient(HttpClient client, IPolicyRegistry<string> policyRegistry, ILogger<MyHttpClient> logger, string baseAddress, TimeSpan? timeout = null)
{
_client = client;
_client.BaseAddress = new Uri(baseAddress);
if (timeout.HasValue)
{
_client.Timeout = timeout.Value;
}
_policyRegistry = policyRegistry;
_logger = logger;
// Adding the LoggingHandler
_client.MessageHandlers.Add(new LoggingHandler(logger));
// ... other code ...
}
Bu geliştirmelerle, HTTP istemcimiz artık her bir HTTP isteğinin ve yanıtının kaydını tutuyor.