7.ASP.NET MVC 5.0中的Routing【路由】
大家好,这一篇向大家介绍asp.net mvc路由机制。【ps:上一篇-->6. asp.net mvc 5.0中的html helpers【html帮助类】 】
路由是一个模式匹配系统,它确保你能够将浏览器的请求,传递到控制器特定的action方法上。路由引擎使用路由表,来将浏览器发送来的请求url和路由表中定义的url进行匹配。routeconfig文件用来添加路由规则,路由是调用控制器和action的方式。
我们在global.asax文件中注册路由:通过在application_start方法中调用registerroutes方法来注册路由。路由用于创建用户友好的urls.路由可以设置程序启动页面,就像asp.net web forms 这样。路由系统能够使我们能够创建任何您想要的url,并以清晰和简洁的方式表达它们。
下面是路由引擎来执行路由,路由系统根据,用户请求的url,来匹配路由表。如果找到了,就继续处理,没找到就抛异常。当asp.net 路由引擎在运行的时候收到了这个请求,然后就会为请求的url,在路由表中找到匹配的规则,如果找到了 ,请求就会接着转到相应的控制器中,否则就会报http 404错误。
下面的图片中,chapters是控制器,speakers是方法,actions是可选的,这个url匹配的是home/action这个路由规则,其中action是home控制器中的方法,还有路由你可以进一步配置一个可选参数id,用来指向特定的数据。这就是为什么路由引擎知道哪些参数是可选的了。
现在理论知识了解差不多了,我们来看看怎么给mvc应用程序添加路由,以完成从控制器到action的映射。我们来创建一个项目,动手实践一下:
创建一个空模板的mvc应用程序。
每一个mvc应用程序都默认创建了路由配置文件routeconfig,里面有默认的实现。我们来看看:
可以看到routeconfig类有一个静态的registerroutes方法,这个方法在我们程序启动的时候,从global.asax文件中进行注册。除此之外,任何带有.axd的请求,就会被ignoreroute进行捕捉,而交给程序的其他处理机制进行处理。我们可以这样说,ignoreroute用来阻止特殊的路由表,例如web.config,图片文件等等。
maproute方法是一个扩展方法,意味着方法已经在路由集合中定义了。代码里面定义了默认的路由规则,默认的路由名称是”default“,指向的是home控制器,index方法,还有一个可选的id参数。
路由表在golbal.asax文件中进行注册,当程序启动的时候,application_start方法被调用,然后就进行路由注册。
基本的默认路由配置介绍完了,我们怎么创建自己的路由规则呢?
首先,我们创建一个author控制器,然后修改一下里面的代码:
然后创建authordetail视图,写入下面的代码:
现在打开routeconfig文件,创建一个新的路由--【author】
运行项目:
然后再浏览器的url中输入9:
现在以querystring方式,在浏览器中输入:
还可以在方法上标注调用的是哪个路由:
看这里我们,就创建了一个路由了author。大家学会了么?