繁体   English   中英

Asp.Net核心ActionFilter-如何传递不同数量的参数

[英]Asp.Net core ActionFilter - how to pass varying number of parameters

我想将不同数量的参数传递给ActionFilter。 例:

[TypeFilter(typeof(AuthorizeFilter), Arguments = new object[] {PolicyName.CanUpdateModule, PolicyName.CanReadModule })]
public async Task<IActionResult> PutModule([FromRoute] Guid id, [FromBody] Module module)

我按如下所示定义了过滤器,但出现错误“ InvalidOperationException:找不到类型'MyApp.AuthFilters.AuthorizeFilter'的合适的构造函数。请确保该类型是具体的,并且已为公共构造函数的所有参数注册了服务。 我如何解决这个问题?

public class AuthorizeFilter : ActionFilterAttribute
{
    private readonly IAuthorizationService _authService;
    private readonly string[] _policyNames;

    public AuthorizeFilter(IAuthorizationService authService,params string[] policyNames)
    {
        _authService = authService;
        _policyNames = policyNames.Select(f => f.ToString()).ToArray();
    }...
}

关闭,但没有雪茄。 您正在使用错误的参数调用过滤器。 您已经将其称为TypeFilterAttribute ,因为需要DI 传入的参数。

现在,您只需要修正参数即可。 您想传递一个字符串数组,但是要传递几个字符串。

[TypeFilter(typeof(AuthorizeFilter), 
    Arguments = new object[] {
        new string[] { PolicyName.CanUpdateModule,  PolicyName.CanReadModule }
    }
)]
public async Task<IActionResult> PutModule([FromRoute] Guid id, [FromBody] Module module) {
    /*do stuff*/
}

尽管如此,您的IAuthorizationService仍需要在您的DI容器中注册才能解决。

然后,您需要从AuthorizeFilter类中删除params关键字:

public class AuthorizeFilter : ActionFilterAttribute
{
    private readonly IAuthorizationService _authService;
    private readonly string[] _policyNames;

    public AuthorizeFilter(IAuthorizationService authService,string[] policyNames)
    {
        _authService = authService;
        _policyNames = policyNames;
    }
    /* ... */
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM