2009-04-08 72 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是最简单的。我可能会坚持下去,直到找到有力的理由来移动或找到替代方案。默认模板使用这种方法。

[更新]广州打我给它