如何为ASP.NET MVC站点的主页设置路由?

时间:2009-04-08 17:42:39

标签: asp.net-mvc routing

我正在使用ASP.NET MVC站点,该站点将使用CMS控制器来访问除主页之外的站点的所有页面。这是个主意:

家庭控制器:

  • 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保留为unrouted和unredirected作为应用程序的入口点 - 使用静态链接将用户带入应用程序的MVC部分(或其他静态内容)。
  2. 使用Page_Load事件处理程序代码在后面的代码中重定向Default.aspx,或使用Response.Redirect(“〜/ home”)将它们发送到Home控制器(尽管这是一个往返重定向)。
  3. 重命名或删除Default.aspx。尽管标记中的警告声明需要default.aspx来确保当用户发出“/”请求时IIS已激活ASP.NET MVC ......在VS dev服务器或IIS7中实际上并不需要它。默认请求将保留为应用程序根请求“/”,并将被默认路由捕获并发送到主控制器。
  4. 我猜另一种选择是只使用一个控制器和一些检测主页案例的逻辑,但这似乎与这个概念作斗争。

    您如何建议为网站主页设置特定路线?

3 个答案:

答案 0 :(得分: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);

这会将请求重写为root并由上面的地图路径处理。

BTW,您实际上可以从MVC模板项目中找到代码。

答案 1 :(得分:3)

如果在IIS7集成模式下托管,我建议摆脱default.aspx。据我了解,它只需要在IIS6和IIS7经典模式上激活。

答案 2 :(得分:0)

我认为选项#1最简单。在寻找移动或寻找替代方案的强大理由之前,我可能会坚持下去。默认模板使用此方法。

[更新]广州打败了我