2009-08-20 97 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