如何将参数添加到 asp.net 中的操作过滤器?
How do I add a parameter to an action filter in asp.net?
我有以下过滤器属性,我可以像这样将字符串数组传递给属性 [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
传递给动作过滤器的实现?我是不是漏掉了一些很明显的东西!?
TypeFilterAttribute
有一个 Argument
属性(object[]
类型),您可以在其中将参数传递给实现的构造函数。因此应用于您的示例,您可以使用此代码:
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)
{
}
}
}
我有以下过滤器属性,我可以像这样将字符串数组传递给属性 [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
传递给动作过滤器的实现?我是不是漏掉了一些很明显的东西!?
TypeFilterAttribute
有一个 Argument
属性(object[]
类型),您可以在其中将参数传递给实现的构造函数。因此应用于您的示例,您可以使用此代码:
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)
{
}
}
}