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

Jon*_*way 14 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
  • (几乎其他任何东西)

此页面列出了有关如何设置默认页面路由的一些选项:

  1. 保留Default.aspx unrouted和unredirected作为应用程序的入口点 - 使用静态链接将用户带入应用程序的MVC部分(或其他静态内容).
  2. 在后面的代码中重定向Default.aspx,使用Page_Load事件处理程序代码,或使用Response.Redirect("〜/ home")将它们发送到Home控制器(尽管这是一个往返重定向).
  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 = "" }
);
Run Code Online (Sandbox Code Playgroud)

将以下内容放在Default.aspx的页面加载中

HttpContext.Current.RewritePath(Request.ApplicationPath, false);
IHttpHandler httpHandler = new MvcHttpHandler();
httpHandler.ProcessRequest(HttpContext.Current);
Run Code Online (Sandbox Code Playgroud)

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

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