c# - 登录后在 OnTicketReceived 事件中检索 cookie
问题描述
我的 ASP.NET Core 应用程序使用 OpenID Connect 登录用户。用户登录后,我想检索登录前设置的 cookie。现在,我正在使用 OIDC 中间件的 OnTicketReceived 事件。为了访问 HttpContext,我使用了一个使用 IHttpContextAccessor 对象的辅助类。问题是 myCookie 变量仍然为空。登录后如何检索 cookie 值?
启动.cs:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddAuthentication(options =>
{
...
})
.AddOpenIdConnect("oidc", options =>
{
...
options.Events = new OpenIdConnectEvents
{
OnTicketReceived = e =>
{
if (e.Principal.Identity.IsAuthenticated)
{
string myCookie = HttpHelper.HttpContext.Request.Cookies[Constants.MY_COOKIE];
}
}
};
});
}
public static class HttpHelper
{
private static IHttpContextAccessor accessor;
public static void Configure(IHttpContextAccessor httpContextAccessor)
{
accessor = httpContextAccessor;
}
public static HttpContext HttpContext => accessor.HttpContext;
}
解决方案
HttpContext 在参数上可用,因此不需要辅助类。
options.Events = new OpenIdConnectEvents
{
OnTicketReceived = async e =>
{
if (e.Principal.Identity.IsAuthenticated)
{
string myCookie = e.HttpContext.Request.Cookies[Constants.MY_COOKIE];
}
}
};
也可以通过参数via访问其他服务var service = e.HttpContext.RequestServices.GetRequiredService<IWhateverService>();
推荐阅读
- r - 固定效应 plm 函数的负调整 R 平方
- javascript - Javascript中字段的特定正则表达式
- python - Python for 循环不会获取列表中的每个元素
- css - 中心 ::before 伪选择器
- android - 如何在 android pie 中添加锁屏交互小部件
- java - @JsonIgnore 仅针对某些特定端点
- c++ - 如何使用openCV图像编译使用opencv的cpp
- python - Jetson xavier NX 带蜂鸣器
- python - Opensubtitles api python数据不是字典
- ios - 如何使用 SwiftUI 将 CoreData Context 传递给在 Swift 5 中以表格形式呈现的新视图?