我的应用程序中有一些代码需要在每个请求上执行,在执行任何其他操作之前(甚至在验证之前)。到目前为止,我一直在我的Global.asax中使用Application_BeginRequest
事件,这一切都运行良好。但是这段代码需要访问数据库,而从Global.asax执行此操作由于某种原因感觉不对。此外,我正在使用的Ninject.MVC3 nuget不会将依赖项注入我的HttpApplication ctor。
所以我决定将此代码移动到自己的全局动作过滤器中。我现在遇到的问题是无论我使用什么Order或FilterScope给出这个过滤器,我都不能先让它执行;我的授权过滤器总是胜过它。 MSDN似乎证实了这一点:
过滤订单
过滤器按以下顺序运行:
- 授权过滤器
- 操作过滤器
- 响应过滤器
- 例外过滤器
醇>例如,授权过滤器运行 第一个和异常过滤器最后运行。 在每个过滤器类型中,订单 value指定运行顺序。内 每个过滤器类型和顺序,范围 枚举值指定顺序 用于过滤器。
我知道我可以使用HttpModule,但感觉不是非常 MVCish ,所以我试图在走这条路线之前耗尽所有可能性,这导致了我的问题:
全局操作过滤器是否有BeginRequest等效项?
答案 0 :(得分:16)
您可以在基本控制器的Initialize方法中执行此操作。
另一种可能性是注册global filter:
public class MyGlobalFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// that's gonna be hit
}
}
以及RegisterGlobalFilters
的{{1}}事件:
Global.asax