gpt4 book ai didi

c# - 如何根据 cookie 值将用户对象从启动类注入(inject)到 Controller 构造函数

转载 作者:行者123 更新时间:2023-11-30 12:39:25 24 4
gpt4 key购买 nike

我正在使用 CookieAuthentication 来实现自定义登录,

app.UseCookieAuthentication(new CookieAuthenticationOptions()
{
AuthenticationScheme = "MyCookieMiddlewareInstance",
LoginPath = new PathString("/Account/Unauthorized/"),
AccessDeniedPath = new PathString("/Account/Forbidden/"),
AutomaticAuthenticate = true,
AutomaticChallenge = true,
CookieName="Id",
});

我的应用程序中的每个 Controller 都需要一个用户对象,它可以使用 cookie 中存在的 secret id(CookieName="Id") 创建。如何通过读取 cookie 创建用户对象并在每次请求时注入(inject) Controller 。

我尝试了以下方法,

public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
var sp = services.BuildServiceProvider();
services.AddTransient<IUserContext, UserObject>(a => new UserObjectResolver(sp.GetService<IHttpContextAccessor>()).GetUserObject());
}

但是这里的 IHttpContextAccessor 在请求到达时似乎总是 null

最佳答案

实现工厂函数采用IServiceProvider参数,因此您需要更新为

services.AddTransient<IUserContext>(provider => 
new UserObjectResolver(provider.GetService<IHttpContextAccessor>‌​()).GetUserObject()
)‌​;

并且不使用 var sp = services.BuildServiceProvider()

我还建议创建一个过滤器来检查 cookie 并创建用户的 IPrincipal。至少到那时,请求已经有时间进行初始化,然后所有 Controller 都可以默认访问该主体。

考虑审查您的设计。

关于c# - 如何根据 cookie 值将用户对象从启动类注入(inject)到 Controller 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45672179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com