我目前正在编写一个与 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。
基本上我有两个问题: