MVC下的路由规则设置

原本一直是使用默认的路由规则的,但自动网站被架在虚拟目录下后就无法正常访问了,全部是404错误.

之前也没仔细学习过mvc 的路由规则,这次正好有这个机会去深入的了解研究.

 

特别说明一点,如果URL请求的文件是存在的.那么是不会被mvc路由的.

 


 

我们看下默认的路由设置

 

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); //路由排除项目 符合要求的url是不会被路由的  比如说mvc项目中插了几个webservices 那么要排除.asxc文件
                                                      //pathInfo是任意字符串的意思
routes.MapRoute(
"Default", // 路由规则的名称
"{controller}/{action}/{id}", // 规则的匹配说明   控制器/方法名/参数
 URL new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值 (UrlParameter.Optional-可选的意思)
);
}

再来个复杂一点的


 routes.MapRoute(
                "Rule1", //路由规则的名称
                "Admin/{controller}/{action}-{Year}-{Month}-{Day}", //url结构
                new { controller = "Home", action = "Index", Year = "2010", Month = "04", Day = "21" }, //参数默认值
                new { Year = @"^\d{4}", Month = @"\d{2}" }, //对参数进行约束限制 使用正则
                new string[] { "Admin.Controllers" } //指定命名空间
            );



还有一点 如果某些参数是固定的 那么可以不在URL中显示,比如固定的控制器和方法

routes.MapRoute(

"product-details",

"product/{id}",

new { controller = "Product", action = "Details", id = @"d"}

);

可以直接用 product/123这样的路径去访问 ?而无需product/details/123这样的url