代码之家  ›  专栏  ›  技术社区  ›  Jon Galloway

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

  •  14
  • Jon Galloway  · 技术社区  · 15 年前

    我正在使用一个ASP.NET MVC站点,该站点的所有页面(除了主页)都将使用CMS控制器。这里的想法是:

    主控制器:

    • www.
    • 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. 使用页面加载事件处理程序代码或使用response.redirect(“~/home”)将代码中的default.aspx重定向到主控制器(尽管这是一个往返重定向)。
    3. 重命名或删除default.aspx。尽管标记中有警告说,当用户发出“/”请求时,需要default.aspx来确保ASP.NET MVC被IIS激活…在vs dev服务器或iis7中都不需要它。默认请求将保留应用程序根请求“/”,并由默认路由捕获并发送到主控制器。

    我想另一个选择是只使用一个控制器和一些逻辑来检测主页的情况,但这似乎与这个概念相抵触。

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

    3 回复  |  直到 15 年前
        1
  •  14
  •   Canton    15 年前

    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模板项目中找到代码。

        2
  •  3
  •   Michael Stum    15 年前

    如果托管在iis7集成模式下,我建议去掉default.aspx。据我所知,只有在iis6和iis7经典模式下激活才有必要。

        3
  •  0
  •   Johannes Setiabudi    15 年前

    我认为选项1最简单。我可能会一直坚持下去,直到找到一个强有力的理由,或者找到另一个选择。默认模板使用这种方法。

    [更新]坎顿打败了我