必须在任何请求之前添加路由,所以添加路由的唯一路径就是Global.asax文件的Application_Start事件内部
public static void RegisterRoutes(RouteCollection routes)
{
Route bolg = new Route(
"blog/arch/{year}/{month}/{day}",
new MvcRouteHandler()
);
routes.Add(blog);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
备注:向集合中添加一个路由是,还可以指定一个名称,在控制器内部或者当前创建指向特定路由的链接时,可以通过路由的友好名称引用路由。
routes.Add("blog",blog);
只要你愿意,可以添加任何数量的路由,当一个请求到达应用程序是,路由的引擎将遍历所有已注册的路由,检查请求的url是否和url模式匹配,然后在根据指定约束检查url参数是否有效。一旦路由引擎找到一个匹配的路由,就会停止遍历,为此,路由的注册顺序非常重要。
所有路由都是RouteCollection实例,RouteCollection有两个属性
StopRoutingHandler:特殊的处理程序。用于路由引擎停止处理,并让默认程序完成其工作,该属性经常用于资源文件(.axd)或web服务(.asmx)
示例:
routes.Add(new Route(
"{resource}.axd/{*pathInfo}",new StopRoutingHandler()
));
RouteExistingFiles:
如果在请求是该属性设置为true,则指示路由引擎处理请求也处理对已存在文件的请求,否则,将有已存在的asp.net页面直接处理请求,该属性默认是false,
如果设置成true,路由引擎就会处理图像,样式表,javascript文件。
路由辅助方法:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
等价于
routes.Add(new Route(
"{resource}.axd/{*pathInfo}",new StopRoutingHandler()
));
routes.MapRoute(
"blog",
"blog/{year}/{month}/{day}",
new
{
year = "2011",
month = "11",
day = "0"
},
new
{
year = @"\d{2}|\d{4}",
month = @"\d{1,2}",
day = @"\d{1,2}",
}
);
调试路由:
protected void Application_Start()
{
RouteTable.Routes.RouteExistingFiles = true;
RegisterRoutes(RouteTable.Routes);
RouteDebug.RouteDebugger.RewriteRoutesForTestiing(RouteTable.Routees);
}
这个需要下载插件名称是RouteDebug,并对它引用