如何在asp.net中的操作过滤器中添加参数? [英] How do I add a parameter to an action filter in asp.net?
本文介绍了如何在asp.net中的操作过滤器中添加参数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我具有以下过滤器属性,并且可以将字符串数组传递给该属性,例如 [MyAttribute( string1, string2)]
。 / p>
I have the following filter attribute, and i can pass an array of strings to the attribute like this [MyAttribute("string1", "string2")]
.
public class MyAttribute : TypeFilterAttribute
{
private readonly string[] _ids;
public MyAttribute(params string[] ids) : base(typeof(MyAttributeImpl))
{
_ids = ids;
}
private class MyAttributeImpl : IActionFilter
{
private readonly ILogger _logger;
public MyAttributeImpl(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger<MyAttribute>();
}
public void OnActionExecuting(ActionExecutingContext context)
{
// HOW DO I ACCESS THE IDs VARIABLE HERE ???
}
public void OnActionExecuted(ActionExecutedContext context)
{
}
}
}
如何将字符串数组 _ids
传递给操作过滤器的实现?我是否真的错过了一些明显的事情!?
How do i pass the string array _ids
to the implementation of the action filter? Am i missing something really obvious!?
推荐答案
TypedFilterAttribute
已得到 Argument
属性(类型为 object []
),可以在其中将参数传递给实现的构造函数。因此,应用于您的示例,您可以使用以下代码:
The TypedFilterAttribute
has got a Argument
property (of type object[]
) where you can pass arguments to the constructor of the implementation. So applied to your example you can use this code:
public class MyAttribute : TypeFilterAttribute
{
public MyAttribute(params string[] ids) : base(typeof(MyAttributeImpl))
{
Arguments = new object[] { ids };
}
private class MyAttributeImpl : IActionFilter
{
private readonly string[] _ids;
private readonly ILogger _logger;
public MyAttributeImpl(ILoggerFactory loggerFactory, string[] ids)
{
_ids = ids;
_logger = loggerFactory.CreateLogger<MyAttribute>();
}
public void OnActionExecuting(ActionExecutingContext context)
{
// NOW YOU CAN ACCESS _ids
foreach (var id in _ids)
{
}
}
public void OnActionExecuted(ActionExecutedContext context)
{
}
}
}
这篇关于如何在asp.net中的操作过滤器中添加参数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文