详解ASP.NET 4中的URL Routing功能

开发 后端
在这里我们将体验下ASP.NET 4中的URL Routing功能,希望本文能对价了解URL Routing有所帮助。

本文将从URL Routing的概念开始讲起,同时介绍ASP.NET 4.0中关于URL Routing的功能问题。希望本文能对大家有所帮助。

什么是URL Routing

首先,URL routing其实在ASP.NET 5 SP1中就被引入了,但是介于之前一直没有用到,况且微软的很多关于ASP.NET 4的介绍都把这作为一新的功能,因此就把题目取为这个吧。
之前,一个典型的ASP.NET的URL通常如下http://www.myexample.com/salesreport.aspx?year=2009

在这个URL中的salesreport.aspx代表的是一个真实存在的物理文件,后缀.aspx在url中的存在不仅完全没有意义,而且使得这个url不是SEO-friendly的。而使用URL Routing之后,我们就可使用如下更简洁明了的地址来访问了,http://www.myexample.com/salesrepot/2009

使用Route Engine进行URL Mapping

在asp.net mvc中,通过MapRoute将url映射到相应的controller和action, 而在web form中,在Global.assx的Application_Start中,我们通过MapPageRoute来将url映射到一个页面上

  1. void RegisterRoutes(RouteCollection routes)   
  2. {      
  3. routes.MapPageRoute("SalesRoute""SalesReport/{year}""~/sales.aspx");                                  

MapPageRoute这里使用了三个参数,***个是给这个Route的命名,第二个是这个URL的映射Pattern, 而***一个就是对应的ASPX页面。除了这个最常用直接的方法之外,还可以使用其重载的其它方法,来个route设置default值,添加各种约束条件,如下面的这一个

  1. void RegisterRoutes(RouteCollection routes)   
  2. {   
  3.  routes.MapPageRoute("SalesRoute",   
  4.                         "SalesRoute/{year}",   
  5.                           
  6. "~/sales.aspx"true,   
  7.                        new RouteValueDictionary{   
  8.                             { "year", DateTime.Now.Year.ToString()}},                                            
  9.                         new RouteValueDictionary{   
  10.                            { "year", @"\d{4}" } });   

相比于***个route,这个多了三个参数,***个为boolean值,后面两个为RouteValueDictionary, 其中***个就指定了一个default值,而***一个就是一个约束,通过正则表达式约束了参数year必须是四位的数字。

在将SalesRoute/2009成功的映射到sales.aspx页面之后,如何在sales的code中获取这个“2009"值呢?通过Page类的RouteData来获取

  1. protected void Page_Load(object sender, EventArgs e)   
  2. {       
  3. string year = RouteData.Values["year"as string;                                                    

使用Routing Engine生成URL

除了解析URL之外,我们同时可以生成这些简洁明了的URL, 如下面的代码

  1. RouteValueDictionary parameters = new RouteValueDictionary   
  2. {   
  3. "year""2008" },   
  4. "category""recreation" }  
  5. };    
  6. VirtualPathData vpd = RouteTable.Routes.GetVirtualPath(null"SalesRoute", parameters);                      
  7. hyperLnk.NavigateUrl = vpd.VirtualPath; 

这里的SalesRoute就是我们在Application_Start中注册过的那个Route。 值得注意的是,在SalesRoute的Pattern中,我们并没有”{category}”,那么RouteEngine怎么处理这个值呢?这时,category就为被作为一个querystring添加到url中,生成的URL将会是这样的:http://www.myexample.com/salesreport/2009?category=recreation

此外,如果在这个sales页面上加一个button,这个button对应的url会不会也会如上面的url那样简洁呢?答案是肯定的。但是是通过在Form标签中,指定Action来实现页面的回发。

总结

虽然这个新生添加Route功能并不能使Asp.Net Web Form变得像Asp.Net MVC那样让人心动,不过这至少是一个不错的功能。

原文标题:体验ASP.NET 4之URL Routing

链接:http://www.cnblogs.com/jun1st/archive/2009/10/25/aspnet_urlrouting.html

【编辑推荐】

  1. 中途关闭ASP.NET是否影响服务器端执行
  2. 关闭浏览器Session1分钟失效ASP.NET的BUG
  3. 概述ASP.NET页面框架
  4. 描述ASP.NET页面表单
  5. ASP.NET 页面对象模型
责任编辑:彭凡 来源: 博客园
相关推荐

2009-08-21 10:51:55

ASP.NET Rou解析URL

2009-08-19 09:23:40

ASP.NET Rou

2009-07-21 15:11:14

ASP.NET Rou

2009-07-31 09:58:20

URL映射ASP.NET

2009-07-22 14:23:39

URL RewriteASP.NET

2009-03-09 13:46:31

RoutingWebASP.NET

2009-07-23 16:28:20

URL映射ASP.NET 2.0

2009-07-22 18:08:00

ASP.NET跨页提交

2009-07-27 17:15:51

URL RewriteASP.NET

2009-01-04 13:27:10

URL RewriteIISASP.NET

2009-03-12 10:42:38

RoutingIgnoreRouteASP.NET

2009-07-31 09:39:59

ASP.NET和URL

2009-08-05 13:16:43

ASP.NET URL

2009-08-13 11:44:25

ASP.NET中的多种

2009-07-29 16:08:07

ASP和ASP.NET

2010-01-08 11:04:06

ASP.NET 4SEO

2009-10-15 14:50:34

ASP.NET Rou

2009-08-19 11:39:38

ASP.NET Rou

2009-08-05 14:46:17

ASP.NET url

2014-08-26 09:22:40

ASP.NET MVCRouting
点赞
收藏

51CTO技术栈公众号