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