Asp.net mvc 错误:";此网页有一个重定向循环";在asp.NETMVC中
在MVC中,我为会话超时创建了自定义属性,如: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
[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方法所在的同一控制器中。我已将该动作方法放置在单独的控制器中,效果良好。