我正在使用 asp.net mvc 3 开发 Web 应用程序。我编写了自定义全局操作过滤器,每当我调用 mvc 站点中的任何页面时都会触发该过滤器。
在该过滤器中,我正在检查某些条件,如果满足这些条件,我会将用户重定向到“不可用”页面。它在所有情况下都可以正常工作,期待一个。
它不适用于 Home/Index,这是我的默认路由。当我第一次启动应用程序时,我可以在提琴手中看到 Home/Index,状态码为 302(重定向到应用程序/不可用)。浏览器然后尝试重定向到应用程序/不可用页面。令我惊讶的是,我可以从这个页面再次看到 302 in fiddler 到 Home/Index。这一直持续到一段时间,然后我在 Firefox 中遇到错误
“Firefox 检测到服务器正在以永远不会完成的方式重定向对该地址的请求。”
我可以看到提琴手中有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);
}
}