默认情况下运行方法,然后自动在控制器中执行任何操作

时间:2014-08-06 20:37:36

标签: c# asp.net-mvc

在自动调用任何操作之前,有没有办法在控制器中执行方法?例如,假设我拥有存储在cookie中的用户的登录凭据,我有一个用户控制器,并且只要该控制器中的任何操作被调用,我想检查用户是否登录。 (而不是单独在每个动作中调用该方法)

 public ActionResult Test () {
     if (Checklogin()) {
         return View();
     }
     else {
        return new EmptyView();
    }
 }

我想让所有的方法都遵循这个逻辑,但没有在每个方法中单独定义。

1 个答案:

答案 0 :(得分:3)

正如评论中所建议的,使用ActionFilter。 如果您的条件不满足,例如,如果cookie已过期,请调用在重写方法中显示错误消息的操作。

public class AuthenticationAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        base.OnActionExecuting(filterContext);

        if (Condition Not Met)
        {
            filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new
            {
                controller = "Error Message Controller",
                action = "Error Message Action"
            }));
        }
    }
}