0

我有一个带有以下代码的 Web 应用程序和一个 API 应用程序:

网站:

public async Task<string> Test()
    {
        var httpClient = _clientFactory.CreateClient("test");
        var response = await httpClient.GetAsync("http://api.local:5089/api/values");
        var str = await response.Content.ReadAsStringAsync();
        return str;
     }

接口:

[HttpGet]
    public ActionResult<IEnumerable<string>> Get()
    { 
        if (HttpContext.Request.Cookies.ContainsKey("HasAccessed"))
        {
            return new string[] { "AccessCount", "Greater than 1" };
        }
        HttpContext.Response.Cookies.Append("HasAccessed", "true");
        return new string[] { "AccessCount", "First time" };
    }

Test如果我第一次(在 Firefox 上)调用我的操作,响应将是First time。但是如果我第二次调用(在 Chrome 中),响应将大于 1

这是不正确的,因为在其他浏览器中,它必须被视为第一次。

经过调查(使用调试),在对 API 的第二次请求中,我发现 pooledHttpClientHandler被重新使用(正如我们在使用时所期望的那样HttpClientFactory)并且CookieContainerofHttpClientHandler也被重新使用,HasAccessed cookie 的值为true => This导致问题。(我预计这个 cookie 不存在,因为它被认为是 Chrome 对 API 的第一个请求)

这个问题有什么解决办法吗?

4

0 回答 0