在授权策略要求处理程序中访问dbcontext

时间:2020-01-31 21:40:23

标签: asp.net-core-mvc

几年前的以前帖子-Can Policy Based Authorization be more dynamic?

答案之一提供了以下代码:


然后定义处理程序。

public class MinimumAgeHandler : AuthorizationHandler<DataDrivenRequirement>
{
    protected override void Handle(AuthorizationContext context, 
                                   DataDrivenRequirement requirement)
    {
        // Do anything here, **interact with DB**, User, claims, Roles, etc.
        // As long as you set either:
        //    context.Succeed(requirement);
        //    context.Fail();
    }
}

我正在将.NET Core 3 MVC与EntityFrameworkCore一起使用。我希望与处理程序中的数据库进行交互。处理程序没有像控制器一样传递dbcontext。我尝试了几种方法,但均未成功。有谁知道如何从这里访问dbcontext?

请注意,最近的是我在另一则帖子-How to access dbcontext & session in Custom Policy-Based Authorization

中使用以下代码
public class CheckAuthorizeHandler : AuthorizationHandler<CheckAuthorizeRequirement>
{
    MyContext _context;

    public CheckAuthorizeHandler(MyContext context)
    {
        _context = context;
    }

    protected override Task HandleRequirementAsync(
        AuthorizationHandlerContext context, 
        MyRequirement requirement)
    {
        // Do something with _context
        // Check if the requirement is fulfilled.
        return Task.CompletedTask;
    }
}

但出现以下错误:InvalidOperationException:无法使用单例“ Microsoft.AspNetCore.Authorization.IAuthorizationHandler”中的作用域服务“ NASAppsAdmin.Models.NASAppsDbContext”。

1 个答案:

答案 0 :(得分:0)

InvalidOperationException:无法使用单例“ Microsoft.AspNetCore.Authorization.IAuthorizationHandler”中的作用域服务“ NASAppsAdmin.Models.NASAppsDbContext”。实体框架上下文通常使用作用域生存期添加到服务容器中,如果您想使用处理程序中的数据库上下文,请确保您的处理程序未注册为单例。 –费翰