ASP.NET MVC:对所有动作执行代码(全局OnActionExecuting?)

Ale*_*lex 6 c# asp.net-mvc

是否存在"全局"OnActionExecuting,我可以覆盖它以使所有我的MVC操作(无论控制器)在被调用时执行某些操作?如果是这样,怎么样?

Edu*_*eni 12

Asp.net MVC3增加了对Global Filters的支持

来自ScottGu博客:

ASP.NET MVC支持使用称为"过滤器"的机制以声明方式应用"交叉"逻辑.您现在可以使用如下属性语法在控制器和操作方法上指定过滤器:

图片

开发人员通常希望在应用程序中的所有控制器上应用一些过滤器逻辑.ASP.NET MVC 3现在允许您指定过滤器应全局应用于应用程序中的所有控制器.您现在可以通过将其添加到GlobalFilters集合中来完成此操作.RegisterGlobalFilters()现在,一个方法包含在默认的Global.asax类模板中,以提供一个方便的位置(然后由Application_Start()方法调用):

图片

MVC 3中的过滤器分辨率逻辑非常灵活,因此您可以配置仅在满足某些条件时有条件地应用的全局过滤器(例如:启用调试,或者请求使用特定的http动词等).现在也可以从依赖注入(DI)容器中解析过滤器.


Lev*_*evi 4

没有。最简单的方法是编写一个公共基类,所有控制器类型都将其子类化,然后在该基类上粘贴一个操作过滤器或重写其 OnActionExecuting() 方法。

  • 请注意,MVC 3 添加了对全局过滤器的支持 (2认同)