使用 HttpClientFactory 安全吗?
Is it safe to use HttpClientFactory?
在我的 asp.net 核心 MVC 应用程序中,我正在使用 HttpClientFactory
为对 API 服务器的请求创建 HttpClient
对象。
按照 Microsoft 文档,每次调用 HttpClientFactory.CreateClient()
时都会创建新的 HttpClient
对象,因此将值设置为 HttpClient.DefaultRequestHeaders
是安全的。
关于 HttpMessageHandler
个对象,因为它们被合并在一起,以后可以重新使用。所以,如果他们持有cookies信息(例如:将cookies设置为HttpClientHandler
对象),我们就会违反线程安全。
我的假设是否正确?我们如何处理这个问题?
如果我们在HttpRequestMessage
中设置cookie可以吗,然后我们将它与HttpClient
一起发送?
我找到了使用 HttpClientFactory 的解决方案。我们应该禁用主要 HttpMessageHanlder
的 CookieContainer
(它是 HttpClientHandler
):
services.AddHttpClient("configured-inner-handler")
.ConfigurePrimaryHttpMessageHandler(() =>
{
return new HttpClientHandler()
{
UseCookies = false
};
});
在我的 asp.net 核心 MVC 应用程序中,我正在使用 HttpClientFactory
为对 API 服务器的请求创建 HttpClient
对象。
按照 Microsoft 文档,每次调用 HttpClientFactory.CreateClient()
时都会创建新的 HttpClient
对象,因此将值设置为 HttpClient.DefaultRequestHeaders
是安全的。
关于 HttpMessageHandler
个对象,因为它们被合并在一起,以后可以重新使用。所以,如果他们持有cookies信息(例如:将cookies设置为HttpClientHandler
对象),我们就会违反线程安全。
我的假设是否正确?我们如何处理这个问题?
如果我们在HttpRequestMessage
中设置cookie可以吗,然后我们将它与HttpClient
一起发送?
我找到了使用 HttpClientFactory 的解决方案。我们应该禁用主要 HttpMessageHanlder
的 CookieContainer
(它是 HttpClientHandler
):
services.AddHttpClient("configured-inner-handler")
.ConfigurePrimaryHttpMessageHandler(() =>
{
return new HttpClientHandler()
{
UseCookies = false
};
});