Asp.net mvc 错误:";此网页有一个重定向循环";在asp.NETMVC中

Asp.net mvc 错误:";此网页有一个重定向循环";在asp.NETMVC中,asp.net-mvc,asp.net-mvc-4,session,action-filter,Asp.net Mvc,Asp.net Mvc 4,Session,Action Filter,在MVC中,我为会话超时创建了自定义属性,如: [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)] public class SessionExpireFilterAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionEx

在MVC中,我为会话超时创建了自定义属性,如:

[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”操作方法,我已经为控制器方法放置了

 [SessionExpireFilter]
  public class EmployerController : Controller
  {
   //Action Methods   
  }
但在这里,当会话超时时,它将转到浏览器地址上的操作方法,但显示如下:

 This webpage has a redirect loop

我不知道我哪里出错了?

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

  • SessionTimeout
    操作放在自己的控制器中,而不使用
    SessionExpireFilter
    属性
  • SessionExpireFilter
    属性设置为除
    SessionTimeout
    之外的各个操作,而不是控制器
  • 检查当前操作是否为
    OnActionExecuting
    代码中的
    SessionTimeout
    ,不要执行重定向(这不是最好的主意,因为它的名称将来可能会更改并再次引起麻烦)

在EmployeerController上检查您的属性您的意思是什么?属性有问题吗?可能添加[AllowAnonymous]?我没有为SessionTimeout操作方法设置任何循环?@sanjay不是因为循环,
RedirectToRoute
启动一个新的HTTP请求,它再次调用过滤器,它再次调用
RedirectToRoute
,它再次调用过滤器,等等:)谢谢@ssg,尼斯解释道,我错误地将action方法放在SessionTimeout方法所在的同一控制器中。我已将该动作方法放置在单独的控制器中,效果良好。