【问题标题】:Do method attributes cause filters to be called or do filters check to see if they exist?方法属性会导致调用过滤器还是过滤器检查它们是否存在?
【发布时间】:2014-12-09 23:40:42
【问题描述】:

我仍在学习 MVC,并且对方法属性有概念性问题。

如果我在代码中看到这个

[SomeAttribute]
public ActionResult Index() {
    return View();
}

[SomeAttribute] 的存在是否会导致平台调用代码,或者它是否只是作为数据结构存在,以便由关心它是否存在的某些代码(例如过滤器)检索?

据我所知是后者,但不清楚。我正在使用在 Global.asax.cs 中调用此属性的示例

GlobalFilters.Filters.Add(new SomeAttribute());

无论是否设置了属性,每个方法都会调用代码。一部分人认为这是设计使然,一部分人认为我还没有理解它。

谢谢,

约翰

【问题讨论】:

    标签: c# asp.net-mvc-5 custom-attributes


    【解决方案1】:

    属性本身不运行任何代码。

    MVC 动作管道使用反射来查找动作方法和控制器类上的所有过滤器属性,并手动调用它们,就像它对全局过滤器集合所做的那样。

    【讨论】:

    • 谢谢,我不清楚平台主动搜索并做某事只是因为存在属性。
    【解决方案2】:

    它可能是某种动作过滤器,当动作过滤器被全局注册时,每当一个动作被调用时,动作过滤器就会被执行并按预期执行操作。动作过滤器将有两个方法 OnActionExecuting 和 OnActionActionExecuted。第一个将在调用动作方法时调用,第二个在执行动作结果时调用。请参考以下链接至create custom action filter

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      相关资源
      最近更新 更多