How do I add a parameter to an action filter in asp.net?

前端 未结 1 560

I have the following filter attribute, and i can pass an array of strings to the attribute like this [MyAttribute(\"string1\", \"string2\")].

pu         


        
相关标签:
1条回答
  • 2020-12-09 04:13

    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)
            {
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题