注入 HttpClient

问题描述 投票:0回答:0

我目前正在编写一个与 Web API 接口的库,因此必须发出大量 Web 请求。为此,我使用 HttpClient 类。

有一个主要的“客户端”类,它提供了向 API 发出各种有效 GET 请求的方法。 Web API 还提供登录功能,登录后您可以发出 POST 请求。

我希望有一个简单的检查你当前是否登录。如果我在我的客户端类中创建 HttpClient,这很简单:

public class Client
{
    public bool IsLoggedIn 
    {
        get
        {
            // Check if there is a session cookie
            _httpHandler.
                CookieContainer.
                GetCookies("BaseUri").
                SingleOrDefault(cookie => cookie.Name == "session") != null;
        }
    }
 

    public Client()
    {
        _httpHandler = new HttpHandler();
        _httpClient = new HttpClient(handler);
    }

    public async void Login() { ... }
    public async void Logout() { ... }
    ...

    private HttpHandler _httpHandler;
    private HttpClient _httpClient;
}

然而,据我所知,尽可能重用一个 HttpClient 实例是最理想的。 因此我更喜欢注入 HttpClient,这样客户端代码可以完全控制实例化多少 HttpClients:

public class Client
{
    public Client(HttpClient client)
    {
        _httpClient = client;
    }

    ...
}

这样做时,我不知道有什么方法可以从客户端获取 cookie。

基本上我有两个问题:

  • 让客户端代码注入 HttpClient 是更好的做法吗?
  • 如果是,有没有办法从注入的HttpClient中获取cookie?
cookies dependency-injection httpclient session-cookies dotnet-httpclient
© www.soinside.com 2019 - 2024. All rights reserved.