码迷,mamicode.com
首页 > Web开发 > 详细

[读书笔记]ASP.NET的URL路由引擎

时间:2015-01-26 16:44:23      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

作用

一般的URL:                                                                                                                                                   

举例:http://www.myapp.com/app.aspx?id=2&sessionid=29320xafafa02fa0zga0g8a0z

缺点:

  1. 不美观,不清晰
  2. 搜索引擎不友好,爬虫无法知道文件名后的更多地产品分类

  因此,需要把它映射成更简单易用、涵盖信息更广的URL。

                                                                                                                                     

路由映射基础

相关类:RouteCollection

命名空间:System.Web.Routing

方法:RouteCollection.MapPageRoute(),实例方法

基本思路:要使用URL路由引擎,首先注册路线图。路线图只是从路径表达式到磁盘上的实际页面的一个映射。这些路径在应用程序启动时注册,注册操作通常包含在单独的方法中,如下面代码所示,代码段来自Global.asax.cs文件:

 1 void Application_Start(object sender,EventArgs e)
 2 {
 3    //Code that runs on application startup
 4   InitializeRoutes(RouteTable.Routes);  
 5 }
 6 private void InitializeRoutes(RouteCollection routes)
 7 {
 8   //...perform route registration
 9   routes.MapPageRoute(...);
10 }

注:routes为RouteCollection的实例

  下面总结URL路由的用法,基本上就是RouteCollection.MapPageRoute()的各种重载方法。

 

1.映射基础URL

1 routes.MapPageRoute("login","login","~/Login.aspx);  

 

2.映射包含参数的URL

1 routes.MapPageRoute("blog","blog/{year}/{month}/{day}","~/Blog.aspx");

  参数的查询不能通过Request.queryString来获取,因为参数并不是查询字符串的一部分,参数存在RouteData字典中。正确代码如下:

1 protected void Page_Load(object sender,EventArgs e)
2 {
3     string year=RouteData.Values["year"] as string;
4     string month=RouteData.Values["month"] as string;
5     string day=RouteData.Values["day"] as string;
6     //Perform blog processing based on date parameters
7 }

 

3.映射包含多个段的URL

  将一个星号(“*”)置于命名参数之前:

1 routes.MapPageRoute("products-by-tag","products/tags/{*tagnames}","~/ProductsByTag.aspx");

  其中,tagnames中的各字段用单斜线(“/“)分割。

 

4.使用包含默认参数的路由

1 routes.MapPageRoute("category-browse","category/{categoryname}","~/Category.aspx",true,
2                                  new RouteValueDictionary()
3             {
4               {"categoryname","explosives"}
5             });

  注意的是,目标页面无需知道是否使用的时默认值,仅需从RouteData字典中捕获类别名称即可。

 

5.使用约束路由

  这些约束采用正则表达式进行。

 1 routes.MapPageRoute(
 2   routeName:"constrained-blog",
 3   routeUrl:"cblog/{year}/{month}/{day}",
 4   physicalFile:"~/Blog.aspx",
 5   checkPhysicalUrlAccess:True,
 6   defaults: new RouteValueDictionary({{"year",DateTime.Now.Year.ToString()},...},
 7   constraints:new RouteValueDictionary() {
 8       {"year",@"\d{0,4}"},
 9           {"month",@"\d{0,2}"},
10           {"day",@"\d{0,1}" }
11       }
12  );   

 

[读书笔记]ASP.NET的URL路由引擎

标签:

原文地址:http://www.cnblogs.com/lsr-flying/p/4250350.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!