2

我正在使用 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);
                }
}
4

1 回答 1

2

我设法解决了这个问题。我在 MVC 站点中使用表单身份验证。并且登录 url 被配置为 Home/Index。因此,当用户从 Home/Index 重定向到 Application/Unavailable 时,由于用户未经身份验证,它会再次重定向到默认页面。

然后,我在 web.config 中添加了位置条目,用于从身份验证中排除应用程序/不可用页面。

<location path="Application/Unavailable">
        <system.web>
            <authorization>
                <allow users="*" />
            </authorization>
        </system.web>
    </location>

我的代码现在可以很好地用于主页/索引页面。

于 2013-08-01T03:53:44.387 回答