首先看一下命名路由和没有命名的差别:
命名路由:
routes.MapRoute( name: "Test", // Route name url: "code/p/{action}/{id}", // URL with parameters defaults: new { controller = "Section", action = "Index", id = UrlParameter.Optional } // Parameter defaults );
默认路由:
routes.MapRoute( Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
ASP.NET 中的路由机制没有要求路由具有名称,而且大多数情况下没有名称的路由也能满足大多数应用场合。通常情况下,为了生成一个URL(统一资源定位符),只需要抓取事先已经定义好的路由值,并把他们交给路由引擎,剩下的就有路由引擎来处理,正如我们要介绍的,在有些情况下,使用这种方法在选择生成URL的路由时会可能产生二义性。但给路由命名却可以解决这个问题。
查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/aspx/
下面我们注册两个路由:
routes.MapRoute( name: "Test", // Route name url: "code/p/{action}/{id}", // URL with parameters defaults: new { controller = "Section", action = "Index", id = UrlParameter.Optional } ); routes.MapRoute( name:"Default", // Route name url:"{controller}/{action}/{id}", // URL with parameters defaults:new { controller = "Home", action = "Index", id = UrlParameter.Optional } );
为了在视图中生成一个指向每个路由的超链接,我们在Home下面的Index页面上加入下面代码
@Html.RouteLink("Test",new{controller="Section",action="Index",id=123})
@Html.RouteLink("Default",new{controller="Home",action="Index",id=123})
这里注意:上面两个方法并不能确定使用哪个路由来生成URL,他们只提供了一些路由值,正如所期望的,第一个方法生成指向/code/p/Index/123的URL,第二个方法生成指向/Home/Index/123的URL.
对于上面的这些简单实例而言,生成URL非常简单,但是有些情形还是会令我们头疼。
假设我们在路由列表的开始部分加入如下的页面路由,为了使/aspx/Page.aspx/页面处理/static/url
routes.MapPageRoute( "new", "static/url", "~/aspx/SomePage.aspx" );
注意我们在实验中不能将这个路由放在路由列表的末尾,否则他不能匹配传入的请求,我们就看不到我们想要的效果。为什么会这样呢?因为默认路由会在他之前与我们前面的那两个路由匹配,因此我们要把该路由放到路由列表的开始部分。
那么将上面的路由放到路由列表的开始位置会有说明变化呢?对于传入的请求而言,该路由只能匹配URL为/static/url的请求,而不匹配任何其它的请求,这也正是我们想要的。我们看一下我们点击上面两个超链接返回的URL都是不可用的:
/static/url?controller=Section&action=Index&id=123
/static/url?controller=Home&action=Index&id=123
通常情况下,当使用路由机制生成URL时,我们提供的路由值被用来填充URL参数,但是我们可以看到上面这个路由根本没有URL参数("/static/url"),因此他可以匹配每一个可能生成的URL,也就是我们上面两个链接都匹配了这个路由,所以生成了没有用的URL。
这时我们可以指定路由名称,不仅可以避免二义性,甚至在某种程度上提高性能,因为路由引擎可以直接定位到指定的路由,并尝试用它来生成URL。
在前面的实例中,我们生成了两个链接,下面我们做些修改,就可以看到命名路由的优点了(下面的代码使用了命名参数):
@Html.RouteLink( linkText:"route:test", routeName:"test", routeValues:new{controller="section",action="index",id=123}) @Html.RouteLink( linkText:"Default", routeName:"Default", routeValues:new {controller="Home",action="index",id=123})
这样我们就可以正确找到路由了."人们的名字是他们命运的缩写"。这句话同样使用与生成URL的路由。
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索url
, action
, controller
, 路由
, index
, 123 net
, 生成
, 生成url
, URL不能被Routes匹配
, url路由
, 匹配URL
, url生成
, 路由机制
生成机制
,以便于您获取更多的相关知识。