我创建了一个过滤器IAuthorizationFilter,我需要在这个属性中使用DepencyInjection。
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public class AllowAccessAttribute : Attribute, IAuthorizationFilter
{
private readonly IDomainUnitOfWork unitofwork;
private readonly HttpContext httpContext;
public AllowAccessAttribute(IDomainUnitOfWork unitofwork,HttpContext httpContext)
{
this.unitofwork = unitofwork;
this.httpContext = httpContext;
}
public void OnAuthorization(AuthorizationFilterContext context)
{
string controller = context.RouteData.Values["controller"].ToString();
string action = context.RouteData.Values["action"].ToString();
var userId = httpContext.User.Identity.GetUserId<long>();
var access = string.Format("{0}:{1}", controller, action);
if (unitofwork.UserRepository.AccessLevelRepository.ValidateAccess(userId, access))
context.Result = new StatusCodeResult(403);
}
}当我需要使用这个属性时,它会显示错误。
[HttpGet]
[AllowAccess]
public async Task<ApiReturn> ChangeUserActiveStatus(long id)
{
var result = await dispatchers.SendAsync(new UserActiveStateCommand { id = id });
if (result.Success)
{
return Ok();
}
return BadRequest(result.Exception);
}并显示此错误:
不存在与'AllowAccessAttribute.AllowAccessAttribute(IDomainUnitOfWork,HttpContext所需的形式参数“单位工作”相对应的参数(
)
,有什么问题?我如何解决这个问题?
发布于 2020-03-22 16:19:42
您需要在IoC容器中注册服务。
Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddScoped<IDomainUnitOfWork, DomainUnitOfWork>(); // per request injection
...
}还尝试将方法的属性更改为TypeFilter
[HttpGet]
[TypeFilter(typeof(AllowAccessAttribute))]
public async Task<ApiReturn> ChangeUserActiveStatus(long id)https://stackoverflow.com/questions/60801702
复制相似问题