小编Wil*_*ker的帖子

在 HttpClient 上使用 DelegatingHandler 和自定义数据

考虑到使用 HttpClient 的众所周知的困境和问题 - 即套接字耗尽和不尊重 DNS 更新,最好的做法是使用 IHttpClientFactory 并让容器决定何时以及如何利用 http 池连接效率。这一切都很好,但现在我无法在每个请求上使用自定义数据实例化自定义 DelegatingHandler。

下面的示例说明了我在使用工厂方法之前是如何做到的:

public class HttpClientInterceptor : DelegatingHandler
{
    private readonly int _id;
    public HttpClientInterceptor(int id)
    {
        _id = id;
    }

    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        // associate the id with this request
        Database.InsertEnquiry(_id, request);
        return await base.SendAsync(request, cancellationToken);
    }
}
Run Code Online (Sandbox Code Playgroud)

每次实例化 HttpClient 时,都可以传递一个 Id:

public void DoEnquiry()
{
    // Insert a new enquiry hypothetically 
    int id = Database.InsertNewEnquiry();
    using (var http = new HttpClient(new HttpClientInterceptor(id))) …
Run Code Online (Sandbox Code Playgroud)

c# dotnet-httpclient .net-core

3
推荐指数
1
解决办法
3794
查看次数

标签 统计

.net-core ×1

c# ×1

dotnet-httpclient ×1