比方说,我们有从数据库检索项目列表的代码。结果列表取决于用户权限。 我想要的是使此代码可重用,即可从多个控制器调用。这样做的标准方法是什么?
要在我的代码中进行身份验证,我将通过
从数据库中加载用户User user = dbContext.User.SingleOrDefault(x => x.access_token == User.Identity.Name);
这是我在Startup.cs中使用的身份验证模式:
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
}).AddCookie("Cookies", options =>
{
options.Cookie.Name = "auth_cookie";
options.Cookie.SameSite = SameSiteMode.None;
options.Events = new CookieAuthenticationEvents
{
OnRedirectToLogin = redirectContext =>
{
redirectContext.HttpContext.Response.StatusCode = 401;
return Task.CompletedTask;
}
};
});
我试图将检索列表的代码直接放在一个控制器中,将其他需要代码通过该控制器调用该控制器的控制器放在
services.AddControllersAsServices()
然后
(MyController)HttpContext.RequestServices.GetService(typeof(MyController));
但是ControllerBase中的User属性为空。
我已经阅读了所有可以找到的文档,但是找不到User或HttpContext属性具有值的解决方案。