【问题标题】:How do I add a parameter to an action filter in asp.net?如何将参数添加到 asp.net 中的操作过滤器?
【发布时间】:2016-08-27 12:55:52
【问题描述】:

我有以下过滤器属性,我可以像[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” - 你在使用 ASP.NET Core 吗?
  • 是的,我是 - 这会导致问题吗?
  • 我在旧的 ASP.NET 中看到了实现我需要的示例,但在核心中,我似乎看不到任何实现 TypeFilterAttribute 类并传递参数的示例。
  • 将 asp.net-core 添加到标签...

标签: c# asp.net-core asp.net-core-mvc actionfilterattribute custom-action-filter


【解决方案1】:

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)
        {
        }
    }
}

【讨论】:

  • 这看起来像是在做梦!我会试一试...谢谢!
  • 如何在其中传递“IConfiguration”实例?
  • 这是一个主题相关的帖子stackoverflow.com/a/39258157/125981
  • 你好,我如何在 startup.cs 上注册?
  • @orElse 我不相信你必须这样做。我的作品在启动时无需任何注册。
猜你喜欢
  • 2022-01-21
  • 2020-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多