ASP.Net Core 2.1通过身份验证使代码可重用于多个控制器

时间:2018-10-22 15:31:36

标签: c# asp.net-core asp.net-core-2.1

比方说,我们有从数据库检索项目列表的代码。结果列表取决于用户权限。 我想要的是使此代码可重用,即可从多个控制器调用。这样做的标准方法是什么?

要在我的代码中进行身份验证,我将通过

从数据库中加载用户
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属性具有值的解决方案。

0 个答案:

没有答案