2009-04-08 165 views
14

我正在使用ASP.NET MVC網站,該網站將爲除主頁以外的網站的所有頁面使用CMS控制器。這裏的想法:如何爲ASP.NET MVC網站的主頁設置路由?

Home控制器:

  • www.site.com
  • www.site.com/default.aspx

CMS控制器:

  • www.site.com/about
  • www.site.com/agenda/schedule
  • www.site.com/monkey/eats/spaghetti
  • (幾乎任何東西)

This page列出瞭如何設置一些選項默認頁面的路由:

  1. 離開Default.aspx的未佈線和unredirected爲切入點,以您的應用程序 - 與把你的用戶到應用程序(或其它靜態內容)的MVC部分靜態鏈接。
  2. 使用Page_Load事件處理程序代碼或使用Response.Redirect(「〜/ home」)將它們發送到主控制器(儘管這是往返重定向),在代碼後面重定向Default.aspx。
  3. 重命名或刪除Default.aspx。儘管在標記中有警告說,需要default.aspx來確保在用戶發出「/」請求時由IIS激活ASP.NET MVC ...但它實際上並不需要在VS dev服務器或IIS7中。默認請求將保持爲應用程序根目錄請求「/」,並將被默認路由捕獲併發送到家庭控制器。

我想另外一個選擇是隻使用一個控制器的一些邏輯檢測主頁的情況下,但似乎是在對抗這個概念。

您如何建議爲網站主頁設置特定路線?

回答

14

www.site.com可通過根地圖路線來處理

routes.MapRoute(
    "Root", 
    "", 
    new { controller = "Home", action = "Index", id = "" } 
); 

放入的Default.aspx

HttpContext.Current.RewritePath(Request.ApplicationPath, false); 
IHttpHandler httpHandler = new MvcHttpHandler(); 
httpHandler.ProcessRequest(HttpContext.Current); 

的頁面加載下面這重寫請求根,並通過處理上面的地圖路線。

順便說一句,你實際上可以從MVC模板項目中找到代碼。

3

如果在IIS7集成模式下託管,我建議剛剛擺脫default.aspx。據我所知,它只是在IIS6和IIS7經典模式下進行激活所必需的。

0

我認爲選項#1是最簡單的。我可能會堅持下去,直到找到有力的理由來移動或找到替代方案。默認模板使用這種方法。

[更新]廣州打我給它