在自动调用任何操作之前,有没有办法在控制器中执行方法?例如,假设我拥有存储在cookie中的用户的登录凭据,我有一个用户控制器,并且只要该控制器中的任何操作被调用,我想检查用户是否登录。 (而不是单独在每个动作中调用该方法)
public ActionResult Test () {
if (Checklogin()) {
return View();
}
else {
return new EmptyView();
}
}
我想让所有的方法都遵循这个逻辑,但没有在每个方法中单独定义。
答案 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"
}));
}
}
}