![](/img/trans.png)
[英]How to pass parameters to a custom ActionFilter in ASP.NET MVC 2?
[英]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.