本文介绍了如何将参数添加到 asp.net 中的操作过滤器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下过滤器属性,我可以将字符串数组传递给这样的属性 [MyAttribute("string1", "string2")].

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!?

推荐答案

TypeFilterAttribute 有一个 Argument 属性(类型为 object[]) 您可以在其中将参数传递给实现的构造函数.因此适用于您的示例,您可以使用以下代码:

The TypeFilterAttribute has an 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 中的操作过滤器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-21 07:34