我有一个控制器,我需要在允许访问页面之前进行一些检查,因此每个操作都有以下第一行代码:
ActionResult error;
if ((error = SessionHelper.NotLoggedInResult()) != null)
return error;
有没有办法可以在每个动作之前执行此代码? (可以强制所有操作返回ActionResult
。)
答案 0 :(得分:1)
您可以覆盖控制器中的OnActionExecuting()
方法,但您必须重新构建处理error
结果的方式。这样就可以了:
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
ActionResult error;
if ((error = SessionHelper.NotLoggedInResult()) != null)
filterContext.Result = error;
}
框架在进入Action之前调用 OnActionExecuting()
,因此可以确保此代码始终运行。然后,通过设置filterContext
的结果,它将结束请求并重定向,然后才会调用Action。