Dan*_*zzi 14 action-filter global-asax asp.net-mvc-3
我的应用程序中有一些代码,我需要在执行任何其他任务之前执行(甚至在身份验证之前).到目前为止,我一直Application_BeginRequest在我的Global.asax中使用该事件,这一切都运行良好.但是这段代码需要访问数据库,而从Global.asax执行此操作由于某种原因感觉不对.此外,我正在使用的Ninject.MVC3 nuget不会将依赖项注入我的HttpApplication ctor.
所以我决定将此代码移动到自己的全局动作过滤器中.我现在遇到的问题是无论我使用什么Order或FilterScope给出这个过滤器,我都不能先让它执行; 我的授权过滤器总是胜过它.MSDN似乎证实了这一点:
过滤顺序
过滤器按以下顺序运行:
- 授权过滤器
- 动作过滤器
- 响应过滤器
- 异常过滤器
例如,授权过滤器首先运行,异常过滤器最后运行.在每个过滤器类型中,Order值指定运行顺序.在每个过滤器类型和顺序中,Scope枚举值指定过滤器的顺序.
我知道我可以使用HttpModule,但是感觉不是非常MVCish,所以我试图在走这条路线之前耗尽所有可能性,这导致了我的问题:
是否有一个BeginRequest等效的全局动作过滤器?
Dar*_*rov 16
您可以在基本控制器的Initialize方法中执行此操作.
另一种可能性是注册全局过滤器:
public class MyGlobalFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// that's gonna be hit
}
}
Run Code Online (Sandbox Code Playgroud)
而在RegisterGlobalFilters你的事件Global.asax:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new MyGlobalFilter());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6673 次 |
| 最近记录: |