2009-08-20 140 views
0

我们的大多数项目都是短期和促销性质的。因此,当促销结束时,我们的客户往往想要提供某种“节目结束”或“过期”页面。如何在不修改每个控制器及其方法的情况下将所有控制器操作全部重定向到一个特定的控制器操作?这甚至有可能吗?ASP.NET MVC全球重定向

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

// 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会将所有请求重定向到页面(甚至是图片和样式表),这些页面会非常糟糕。

回答

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" }); 

在请求的URL的动作现在任何东西在/ path /到/ PromoName将使用PromoNameController的索引操作

+0

我认为“{* path}”部分是缺失的部分。我会明天尝试一下,并告诉你它是否有效。谢谢! – Chris 2009-08-21 00:57:06