Trong .NET, việc cấu hình HttpClient
một cách linh hoạt là vô cùng quan trọng để xây dựng các ứng dụng mạnh mẽ và dễ bảo trì.
ConfigureHttpMessageHandlerBuilder là một phương thức mở rộng (extension method) mạnh mẽ, cho phép bạn tùy chỉnh pipeline xử lý tin nhắn (message handling pipeline) cho
HttpClient
. Bài viết này sẽ cung cấp cho bạn một cái nhìn tổng quan về ConfigureHttpMessageHandlerBuilder, cách sử dụng nó, và những điều cần lưu ý để tránh các lỗi thường gặp.
ConfigureHttpMessageHandlerBuilder là một phương thức mở rộng của IHttpClientBuilder
trong namespace
Microsoft.Extensions.DependencyInjection
. Nó cho phép bạn cấu hình một delegate để tùy chỉnh
HttpMessageHandlerBuilder
cho một HttpClient
đã được đặt tên.
HttpMessageHandlerBuilder
chịu trách nhiệm xây dựng pipeline xử lý tin nhắn cho HttpClient
, bao gồm primary handler và các delegating handler.
Tuy nhiên, cần lưu ý rằng phương thức này đã bị deprecated và thay thế bằng
ConfigurePrimaryHttpMessageHandler
và ConfigureAdditionalHttpMessageHandlers
. Lý do cho sự thay đổi này là để cải thiện hiệu suất và khả năng tối ưu hóa của
HttpClientFactory
.
Việc sử dụng ConfigurePrimaryHttpMessageHandler
và ConfigureAdditionalHttpMessageHandlers
mang lại nhiều lợi ích so với
ConfigureHttpMessageHandlerBuilder
đã deprecated:
HttpClientFactory
tối ưu hóa việc tạo và quản lý handler.
Dưới đây là ví dụ minh họa cách sử dụng ConfigurePrimaryHttpMessageHandler
và
ConfigureAdditionalHttpMessageHandlers
để cấu hình HttpClient
:
builder.Services.AddHttpClient("MyhttpClient",
client => client.BaseAddress = new Uri(BaseUrl))
.ConfigurePrimaryHttpMessageHandler(() => {
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
return new HttpClientHandler() {
UseDefaultCredentials = true
};
})
.ConfigureAdditionalHttpMessageHandlers((handlers, sp) => {
handlers.Add(new CustomHttpRequestHandler());
});
Trong ví dụ này:
ConfigurePrimaryHttpMessageHandler
được sử dụng để cấu hình HttpClientHandler
với các thuộc tính như
UseDefaultCredentials
và SecurityProtocol
.
ConfigureAdditionalHttpMessageHandlers
được sử dụng để thêm một CustomHttpRequestHandler
vào pipeline xử lý tin nhắn.
CustomHttpRequestHandler
là một class kế thừa từ DelegatingHandler
, cho phép bạn thực hiện các xử lý tùy chỉnh trên request và response. Ví dụ, bạn có thể sử dụng nó để thêm header, ghi log, hoặc xử lý lỗi.
public class CustomHttpRequestHandler : DelegatingHandler
{
// Xử lý request và response ở đây
}
Khi làm việc với HttpMessageHandler
, có một số điều quan trọng cần lưu ý:
DelegatingHandler
chỉ nên được sử dụng một lần. Nếu cần, hãy tạo một instance mới cho mỗi request. Lỗi "The 'InnerHandler' property must be null. 'DelegatingHandler' instances provided to 'HttpMessageHandlerBuilder' must not be reused or cached" thường xảy ra do tái sử dụng handler.
HttpMessageHandler
được đăng ký với dependency injection container với scope phù hợp (ví dụ: Transient
hoặc Scoped
). Sử dụng AddTransient
có thể giải quyết vấn đề tái sử dụng handler.
Mặc dù ConfigureHttpMessageHandlerBuilder đã bị deprecated, việc hiểu rõ về nó và cách nó hoạt động sẽ giúp bạn dễ dàng chuyển đổi sang sử dụng
ConfigurePrimaryHttpMessageHandler
và ConfigureAdditionalHttpMessageHandlers
. Việc tùy chỉnh pipeline xử lý tin nhắn cho
HttpClient
là một kỹ năng quan trọng để xây dựng các ứng dụng .NET mạnh mẽ và linh hoạt. Bằng cách tuân thủ các nguyên tắc và lưu ý đã trình bày, bạn có thể tránh các lỗi thường gặp và tận dụng tối đa sức mạnh của
HttpClientFactory
.
Bài viết liên quan