控制器范围内的行动前行动

时间:2015-03-12 21:26:18

标签: c# asp.net-mvc

我有一个控制器,我需要在允许访问页面之前进行一些检查,因此每个操作都有以下第一行代码:

ActionResult error; 
if ((error = SessionHelper.NotLoggedInResult()) != null) 
    return error;

有没有办法可以在每个动作之前执行此代码? (可以强制所有操作返回ActionResult。)

1 个答案:

答案 0 :(得分:1)

您可以覆盖控制器中的OnActionExecuting()方法,但您必须重新构建处理error结果的方式。这样就可以了:

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    ActionResult error;
    if ((error = SessionHelper.NotLoggedInResult()) != null)
        filterContext.Result = error;
}
框架在进入Action之前调用

OnActionExecuting(),因此可以确保此代码始终运行。然后,通过设置filterContext的结果,它将结束请求并重定向,然后才会调用Action。