Asp.net core mvc 在授权策略需求处理程序中访问dbcontext

Asp.net core mvc 在授权策略需求处理程序中访问dbcontext,asp.net-core-mvc,Asp.net Core Mvc,在几年前的一篇帖子中- 其中一个答案提供了以下代码: 然后定义处理程序 public class MinimumAgeHandler : AuthorizationHandler<DataDrivenRequirement> { protected override void Handle(AuthorizationContext context, DataDrivenRequirement requi

在几年前的一篇帖子中-

其中一个答案提供了以下代码:


然后定义处理程序

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();
    }
}
公共类MinimumAgeHandler:AuthorizationHandler { 受保护的覆盖无效句柄(AuthorizationContext上下文, 数据驱动程序(需求要求) { //在这里做任何事情,**与数据库**、用户、声明、角色等交互。 //只要设置以下任一项: //成功(要求); //context.Fail(); } }
我正在使用.NET Core 3 MVC和EntityFrameworkCore。我希望与处理程序中的数据库进行交互。处理程序不像控制器那样传递dbcontext。我尝试过几种方法,但都没有成功。有人知道如何从这里访问dbcontext吗

正如你所知,我最近使用的是另一篇文章中的以下代码-

公共类checkAuthorizationHandler:AuthorizationHandler
{
MyContext_上下文;
公共CheckAuthorizeHandler(MyContext上下文)
{
_上下文=上下文;
}
受保护的覆盖任务句柄请求同步(
授权HandlerContext上下文,
我的要求)
{
//利用上下文做点什么
//检查是否满足要求。
返回Task.CompletedTask;
}
}

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

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

InvalidOperationException:无法使用singleton“Microsoft.AspNetCore.Authorization.IAAuthorizationHandler”中的作用域服务“nasapmin.Models.NASAppsDbContext”。
实体框架上下文通常使用作用域生存期添加到服务容器中,如果您想使用处理程序中的数据库上下文,请确保您的处理程序未注册为singleton。
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;
    }
}