几年前的以前帖子-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”。
答案 0 :(得分:0)
InvalidOperationException:无法使用单例“ Microsoft.AspNetCore.Authorization.IAuthorizationHandler”中的作用域服务“ NASAppsAdmin.Models.NASAppsDbContext”。实体框架上下文通常使用作用域生存期添加到服务容器中,如果您想使用处理程序中的数据库上下文,请确保您的处理程序未注册为单例。 –费翰