【问题标题】:How do I set up a route for the home page of an ASP.NET MVC site?如何为 ASP.NET MVC 站点的主页设置路由?
【发布时间】:2010-10-18 09:05:12
【问题描述】:

我正在使用一个 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 未路由和未重定向作为应用程序的入口点 - 使用静态链接将用户带到应用程序的 MVC 部分(或其他静态内容)。
  2. 在后面的代码中重定向 Default.aspx,或者使用 Page_Load 事件处理程序代码,或者使用 Response.Redirect("~/home") 将它们发送到 Home 控制器(尽管这是一个往返重定向)。
  3. 重命名或删除 Default.aspx。尽管标记中的警告说 default.aspx 需要确保 ASP.NET MVC 在用户发出“/”请求时被 IIS 激活......实际上在 VS 开发服务器或 IIS7 中都不需要它.默认请求将保持为应用程序根请求“/”,并将被默认路由捕获并发送到主控制器。

我想另一种选择是只使用一个带有某种逻辑的控制器来检测主页案例,但这似乎与这个概念背道而驰。

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

【问题讨论】:

    标签: asp.net-mvc routing


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      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 并由上面的地图路由处理。

      顺便说一句,您实际上可以从 MVC 模板项目中找到代码。

      【讨论】:

        【解决方案3】:

        我认为选项#1 是最简单的。我可能会坚持下去,直到找到搬家的有力理由或找到替代方案。默认模板使用这种方法。

        [更新] 广州打败了我

        【讨论】:

          猜你喜欢
          • 2016-06-19
          • 2016-03-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多