【问题标题】:How to access CookieContainer in HTTPClient instance created via HTTPClientFactory如何在通过 HTTPClientFactory 创建的 HTTPClient 实例中访问 CookieContainer
【发布时间】:2020-01-31 17:51:00
【问题描述】:

在 ASP.NET Core 2.2 Web API 中,我希望能够从命名为 HttpClient 的访问 CookieContainer,但不知道如何配置它。

在 Startup.cs 中:

        services
            .AddHttpClient("MyClient")                
            .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler
            {
                UseProxy = false,
                //CookieContainer = ???
            });

在控制器中:

public MyController(IOptions<IHttpClientFactory httpClientFactory)
{
   _httpClientFactory = httpClientFactory;
}

public async Task<ObjectResult> Get<T>(string endpoint)
{
   var httpClient = _httpClientFactory.CreateClient("MyClient");
   var response = await httpClient.GetAsync($"{Settings.Url}/{endpoint}");
   //httpClient.CookieContainer ???
}

仅使用HttpClient 的一个实例并将CookieContainer 与其MessageHandler 关联起来非常简单,例如:

var cookieContainer = new CookieContainer();
var handler = new HttpClientHandler() { CookieContainer = cookieContainer };
var client = new HttpClient(handler) { BaseAddress = "http://foo.com/api"}
var result = await client.PostAsync("", content);
//read response cookies
var cookies = cookieContainer.GetCookies(new Uri("http://foo.com/api"));

想知道如何通过使用IHttpClientFactory 创建的HttpClient 实例读取响应cookie。

【问题讨论】:

  • hmm 你上一个例子有点混乱,x.GetCookies,x 是在哪里定义的?你不是说cookieContainer吗?
  • 已更正 - 它肯定是 cookieContainer。

标签: c# asp.net-core


【解决方案1】:

这不是 CookieContainer 实例,但您可以在响应标头中访问原始 cookie:

var cookies = response.Headers.GetValues("Set-Cookie");

你可以尝试在浏览器中调用你的请求,打开Mozilla dev tool,看看它是否真的存在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多