如何根据条件阻止执行控制器动作?

时间:2013-01-30 17:52:47

标签: c# asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我有一个有很多动作的控制器。 我需要根据这个条件阻止执行某些操作:

if (Session["MyObject"] == null) return RedirectToAction("Introduction");

它应该重定向到默认的“简介”操作。

我可以在每个动作中加入这个条件,但我想在一个地方定义这个条件,就像在控制器的构造函数中一样。

有什么想法吗?谢谢。

1 个答案:

答案 0 :(得分:6)

这是一个快速模拟,但我认为这个想法成立

public class CheckSessionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (filterContext.HttpContext.Session["MyObject"] == null)
        {
            // redirect must happen OnActionExecuting (not OnActionExecuted)
            filterContext.Result = new RedirectToRouteResult(
              new System.Web.Routing.RouteValueDictionary {
              {"controller", "Tools"}, {"action", "CreateSession"}

        }
        base.OnActionExecuting(filterContext);
    }   
}