首页 > 解决方案 > 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?

标签: c#cookiesopenid-connectdotnet-httpclient

解决方案


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

资源


推荐阅读