c# - C# 的 HttpClient 可以接受带有路径的 cookie 吗?
问题描述
我有这个代码:
var handler = new HttpClientHandler
{
AllowAutoRedirect = false,
CookieContainer = new CookieContainer(),
UseCookies = true
};
return new HttpClient(handler)
{
Timeout = Timeout.InfiniteTimeSpan
};
我将 OpenID Connect 与 ASP.Net Core 一起使用,它返回如下相关 cookie:
cookieHeader = "correlation=ABCDEFG; path=/signin; secure; HttpOnly";
我打电话给该网站:
using (HttpResponseMessage msg = client.SendAsync(request).Result)
并被重定向到 OpenID 服务器。但是,HttpClient
的 cookie 容器不包含任何 cookie。如果我手动将相同的 cookie 添加到响应中,仅修改路径等于/
例如
cookieHeader = "correlation=ABCDEFG; path=/; secure; HttpOnly";
然后 cookie 出现在HttpClient
'sCookieContainer
中。我不想修改 ASP.Net Core 基础 OpenID 功能来更改 cookie 路径,因此HttpClient
我可以获取 cookie 并进行身份验证。有没有办法HttpClient
用指定的路径保存cookie?
解决方案
看起来这是一个设计使然的失败。尝试手动添加这些 cookie 会产生CookieException
. 看起来 ASP.Net Core 的 OpenID Connect 实现依赖于替代 .NET Framework 当前实现的 RFC。在 RFC 2109 (.NET Framework) 中,您不能使用不属于当前请求的路径设置 cookie,而 .NET Core(根据 RFC 6265)确实允许甚至依赖此行为。我想现在将是手动 cookie 存储。