ASP.NET MVC全局重定向

时间:2009-08-20 19:41:09

标签: asp.net-mvc iis-6

我们的大多数项目都是短期的,具有促销性。因此,我们的客户经常希望在促销结束时提供某种“程序结束”或“过期”页面。如何在不修改每个控制器及其方法的情况下,将所有控制器操作全面重定向到一个特定的控制器操作?这甚至可能吗?

理想情况下,在伪代码中,我希望能够做到这样的事情:

// somewhere in global.asax
if (current_action_url != desired_action_url)
    redirect to desired_action_url

我尝试在URL上进行简单的字符串匹配:

if (!Request.Url.AbsolutePath.ToLower().EndsWith("path/to/desired/page"))
    Response.Redirect("path/to/desired/page"); 

然而,由于我仍在使用IE 6并且必须使用通配符黑客,IE将所有请求重定向到页面(甚至是图像和样式表),这些请求非常糟糕。

1 个答案:

答案 0 :(得分:0)

如何使用路线?定义有效促销的路线,捕获所有可以转到通用的“促销过期”页面

        routes.MapRoute(
                "PromoStillGoing",
                "path/to/PromoStillGoing/{action}",
                new { controller = "PromoStillGoing", action = "Index" });

        routes.MapRoute("Catch All", "{*path}", new { controller = "ExpiredPromos", action = "Index" });

以上内容将针对所有已过期的宣传片进行一页,如果您想要的话,请不要确定。

如果您希望每个促销都有一个过期页面,那么在路线中您可以“忽略”所请求网址中的操作,例如

        routes.MapRoute(
                "ExpiredPromoName",
                "path/to/PromoName/",
                new { controller = "PromoName", action = "Index" });

现在/ path / to / PromoName下的任何内容都将使用PromoNameController的Index操作