我们的大多数项目都是短期的,具有促销性。因此,我们的客户经常希望在促销结束时提供某种“程序结束”或“过期”页面。如何在不修改每个控制器及其方法的情况下,将所有控制器操作全面重定向到一个特定的控制器操作?这甚至可能吗?
理想情况下,在伪代码中,我希望能够做到这样的事情:
// 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 :(得分: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操作