错误:“此网页在asp.net mvc中有一个重定向循环”

时间:2014-07-30 12:55:15

标签: asp.net-mvc asp.net-mvc-4 session action-filter

在MVC中,我为Session Timeout创建了自定义属性,如:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class SessionExpireFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        HttpContext ctx = HttpContext.Current;

        // If the browser session or authentication session has expired...
        if (ctx.Session["USER_ID"] == null )
        {
            filterContext.Result = new RedirectToRouteResult(
                   new RouteValueDictionary {
                    { "Controller", "Employer" },
                    { "Action", "SessionTimeout" }
            });

        }

        base.OnActionExecuting(filterContext);
    }
}

我的意思是当会话超时时,它应该重定向到“SessionTimeout”Action方法,并且我已经为Controller方法添加了,

 [SessionExpireFilter]
  public class EmployerController : Controller
  {
   //Action Methods   
  }

但是在这里,当Session是Timeout时,它会在浏览器地址上执行动作方法,但它显示如下:

 This webpage has a redirect loop

我不知道我哪里出错了?

1 个答案:

答案 0 :(得分:4)

您的SessionTimeout操作导致OnActionExecuting中的SessionExpireFilter再次运行,这将成为一个无限循环。你可以:

  • SessionTimeout操作放在自己的控制器中,而不使用SessionExpireFilter属性
  • SessionExpireFilter属性添加到除SessionTimeout之外的各个操作,而不是控制器
  • 检查SessionTimeout代码中的当前操作是否为OnActionExecuting,并且不执行重定向(不是最好的主意,因为其名称将来可能会发生变化并再次造成麻烦)。