C#的HttpClient可以接受带有路径的cookie吗?

时间:2019-05-16 16:19:37

标签: c# cookies openid-connect dotnet-httpclient

我有此代码:

var handler = new HttpClientHandler
{
    AllowAutoRedirect = false,
    CookieContainer = new CookieContainer(),
    UseCookies = true
};

return new HttpClient(handler)
{
    Timeout = Timeout.InfiniteTimeSpan
};

我正在使用带有ASP.Net Core的OpenID Connect,它会返回如下所示的相关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的{​​{1}}中。我不需要修改ASP.Net Core的基本OpenID功能来更改cookie路径,因此CookieContainer可以获取cookie并进行身份验证。有没有一种方法可以使HttpClient保存具有指定路径的Cookie?

1 个答案:

答案 0 :(得分:0)

这似乎是设计使然的失败故障。尝试手动添加这些cookie会产生一个CookieException。看起来ASP.Net Core的OpenID Connect实现依赖于RFC取代了当前实现的.NET Framework。在RFC 2109(.NET Framework)中,当.NET Core(根据RFC 6265)允许甚至依赖于此行为时,不能使用不属于当前请求的路径设置cookie。我想现在它将是手动cookie存储。

Source