我使用asp.net mvc 3开发Web应用程序。 我编写了自定义全局Action过滤器,每当我调用mvc站点中的任何页面时都会触发它。
在该过滤器中,我正在检查某些条件,如果满足这些条件,我将用户重定向到“不可用”页面。它在所有情况下都能正常工作。
它不能用于Home / Index,这是我的默认路由。当我第一次启动应用程序时,我可以在fiddler中看到Home / Index,状态代码为302(重定向到application / unavailable)。 浏览器然后尝试重定向到应用程序/不可用页面。令我惊讶的是,我可以从这个页面再次看到主页/索引中的302提琴手。这一直持续到一段时间,然后我在Firefox中低于错误
“Firefox检测到服务器正在以永远无法完成的方式重定向此地址的请求。”
我可以看到fiddler中有302的无限循环。但我不知道为什么会这样。我在路由方面做错了吗?
我的代码适用于网站的其他页面。
这是我的代码:
routes.MapRoute("Application", "Application/Unavailable", MVC.Application.Unavailable());
routes.MapRoute("Home", "Home/{action}", new {controller = "Home"}, new[] {"Test.Web.Controllers"});
routes.MapRoute("Default", "{controller}/{action}", MVC.Home.Index(), new[] {"Test.Web.Controllers"});
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
...
...
if (conditionmet)
{
RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary();
redirectTargetDictionary.Add("area", "");
redirectTargetDictionary.Add("action", "Unavailable");
redirectTargetDictionary.Add("controller", "Application");
filterContext.Result = new RedirectToRouteResult(redirectTargetDictionary);
}
}
答案 0 :(得分:2)
我设法解决了这个问题。我在MVC网站中使用表单身份验证。 登录URL配置为Home / Index。因此,当用户从主页/索引重定向到应用程序/不可用时,它将再次重定向到默认页面,因为用户未经身份验证。
然后我在web.config中添加了位置条目,用于从身份验证中排除“应用程序/不可用”页面。
<location path="Application/Unavailable">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
现在我的代码在Home / Index页面上运行得非常好。