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;
}
}