【发布时间】:2020-07-01 14:04:15
【问题描述】:
背景
我正在开发一个 ASP.NET Core Web API,我们在 API 中调用第 3 方 API。这个第 3 方 API 要求每个请求都包含一个带有访问令牌的 cookie。我们的 API 从声明中获取此令牌(来自与请求关联的用户的 ClaimsPrincipal)。
详细信息
This answer 展示了如何在请求中设置 cookie,但该示例要求手动构造 HttpClient(以便能够注入 HttpClientHandler 与CookieContainer)。而且由于不希望手动实例化 HttpClient,我宁愿通过 DI 注入 HttpClient,this example 说明了这一点(使用 IHttpClientFactory)。
在我的服务中,我可以访问一个注入的HttpClient 实例(_httpClient),最简单的函数如下所示:
public async Task<string> GetStatusAsync(ClaimsPrincipal user)
{
// TODO: Add cookie with access token (from user's claims) before making request
return await _httpClient.GetStringAsync(Endpoints.Status);
}
This GitHub issue 询问在使用 IHttpClientFactory 时如何包含授权 cookie,答案是 use the header propagation middleware。现在谈谈我的问题:
据我所知,您在应用程序启动时的服务配置期间设置了标头传播中间件(包含所有标头和 cookie 等)。然而,在我们的 API 中,在实际向 3rd 方 API 发出请求之前,我没有身份验证 cookie 的值。
问题
在发出实际请求之前,如何在使用IHttpClientFactory 注入我的服务的HttpClient 实例上的请求中添加cookie?
【问题讨论】:
-
您可以在设置 HttpClientFactory 时使用
ConfigurePrimaryHttpMessageHandler()方法来配置主处理程序,这应该允许您使用Cookie类使用HttpClientHandler配置 cookie。 docs.microsoft.com/en-us/dotnet/api/…
标签: c# asp.net-core dotnet-httpclient httpclientfactory