这是正确的MVC路由设置还是有另一种方式?

时间:2012-01-15 13:39:43

标签: asp.net-mvc asp.net-mvc-routing

我想保留我的网站的根目录以用于标准的webforms并将MVC页面放在子目录中,以便我有以下内容..

           routes.MapRoute(
            "Default",                                              // Route name
            "Views/{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }  // Parameter defaults
        );

然而,即使这有效并且我看到了一些解决方法,我也不太高兴RedirectToAction似乎将我引向错误的页面,例如。

return RedirectToAction("Index", "Home");

带我去http://localhost/Views,它给了我一个未找到的资源,并且HomeController上的Index操作没有触发。有没有更好的方法来实现我想要的东西,或者我错过了一些明显的东西?

1 个答案:

答案 0 :(得分:0)

如您所知,Views在ASP.NET MVC中是一种保留名称。这是一个现有的目录。您可以在路线定义中将RouteExistingFiles设置为true

public static void RegisterRoutes(RouteCollection routes)
{
    routes.RouteExistingFiles = true;

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Default",
        "views/{controller}/{action}/{id}",
        new { controller = "home", action = "index", id = UrlParameter.Optional }
    );

}

现在,当您导航到http://example.com/viewshttp://example.com/views/homehttp://example.com/views/home/index时,Index控件的Home操作将被执行。