C# 的 HttpClient 可以接受带有路径的 cookie 吗?
Can C#'s HttpClient accept cookies with a path?
我有这个代码:
var handler = new HttpClientHandler
{
AllowAutoRedirect = false,
CookieContainer = new CookieContainer(),
UseCookies = true
};
return new HttpClient(handler)
{
Timeout = Timeout.InfiniteTimeSpan
};
我正在使用带有 ASP.Net Core 的 OpenID Connect,其中 returns 一个像这样的相关 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
的 CookieContainer
中。我不想修改 ASP.Net Core base OpenID 功能来更改 cookie 路径,因此 HttpClient
将获取 cookie 并且我可以进行身份验证。有没有办法让 HttpClient
保存指定路径的 cookie?
看起来这是一个 by-design 静默失败。尝试手动添加这些 cookie 会产生 CookieException
。看起来 ASP.Net Core 的 OpenID Connect 实现依赖于一个 RFC,它取代了当前实现的一个 .NET Framework。在 RFC 2109(.NET Framework)中,您不能使用不属于当前请求的路径设置 cookie,而 .NET Core(根据 RFC 6265)允许甚至依赖此行为。我想现在将是手动 cookie 存储。
我有这个代码:
var handler = new HttpClientHandler
{
AllowAutoRedirect = false,
CookieContainer = new CookieContainer(),
UseCookies = true
};
return new HttpClient(handler)
{
Timeout = Timeout.InfiniteTimeSpan
};
我正在使用带有 ASP.Net Core 的 OpenID Connect,其中 returns 一个像这样的相关 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
的 CookieContainer
中。我不想修改 ASP.Net Core base OpenID 功能来更改 cookie 路径,因此 HttpClient
将获取 cookie 并且我可以进行身份验证。有没有办法让 HttpClient
保存指定路径的 cookie?
看起来这是一个 by-design 静默失败。尝试手动添加这些 cookie 会产生 CookieException
。看起来 ASP.Net Core 的 OpenID Connect 实现依赖于一个 RFC,它取代了当前实现的一个 .NET Framework。在 RFC 2109(.NET Framework)中,您不能使用不属于当前请求的路径设置 cookie,而 .NET Core(根据 RFC 6265)允许甚至依赖此行为。我想现在将是手动 cookie 存储。