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

作用

一般的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  );   
时间: 2024-10-09 02:04:56

[读书笔记]ASP.NET的URL路由引擎的相关文章

读书笔记[ASP.NET+MVC4+Web+编程]

模型:数据和业务逻辑 视图:展示 控制器:接收视图输入数据,通过模型层业务逻辑处理后 返回给视图 分离关注点(模型 视图 控制器).惯例优先原则 browser-->routing-->controller<--view-->browser 控制器是告诉下一步该做什么而不是该怎么做,如显示视图则返回actionresults. 定位视图:优先查找对应文件夹,其次查找shared文件夹 razor:代码段.代码块 部分视图 @Html.Partial(),PartialView()

ASP.NET MVC——URL路由

在MVC之前,ASP.NET假设请求的URL与服务器上的文件之间有关联,服务器接受请求,并输出相应的文件.而在引入MVC后,请求是由控制器的动作方法来处理的.为了处理URL,便引入了路由系统. 首先我们来创建一个基础项目用来演示.代码如下: 1 public class HomeController : Controller 2 { 3 public ActionResult Index() 4 { 5 ViewBag.Controller = "Home"; 6 ViewBag.Ac

ASP.Net MVC开发基础学习笔记:三、Razor视图引擎、控制器与路由机制学习

一.天降神器“剃须刀” — Razor视图引擎 1.1 千呼万唤始出来的MVC3.0 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用WebForm时代沿留下来的ASPX引擎或者第三方的NVelocity模板引擎. Razor在减少代码冗余.增强代码可读性和Visual Studio智能感知方面,都有着突出的优势.Razor一经推出就深受广大ASP.Net开发者的喜爱. 1.2 Razor的语法 (1)Razor文件类型:Razor支持两种文件类型,分

《ASP.NET MVC高级编程(4版)》读书笔记(5)表单和HTML辅助方法

5.1 表单使用 5.1.1 action 和 method 特性 <form action="/Home/Index"> <input name="q" type="text"/> <input value="提交" type="submit" /> </form> 如果没有 method 默认是: get 方法. 5.1.2 GET 方法还是 POST 方

[学习笔记] 理解ASP.NET MVC的路由系统

引言 路由,正如其名,是决定消息经由何处被传递到何处的过程.也正如网络设备路由器Router一样,ASP.NET MVC框架处理请求URL的方式,同样依赖于一张预定义的路由表.以该路由表为转发依据,请求URL最终被传递给特定Controller的特定Action进行处理.而在相反的方向上,MVC框架的渲染器同样要利用这张路由表,生成最终的HTML页面并返回URL.所以,理解整个ASP.NET MVC的路由系统,有两个必须出现的关键元素:Controller与Action,有两个方向的操作:传入的

学习ASP.NET MVC5框架揭秘笔记-ASP.NET路由(一)

ASP.NET路由 由于来自客户端的请求总是指向定义在某个Controller类型中的某个Action方法,并且目标Controller和Action的名称由请求URL决定,所以必须采用某种机制根据请求URL解析出目标Controller和Action的名称,我们将这种机制称为"路由(Routing)"但是路由系统并不是专属于ASP.NET MVC的,而是直接建立在ASP.NET上(实现实现路由的核心类型基本上定义在程序集"System.Web.dll"中).路由机

MySQL技术内幕-InnoDB存储引擎-读书笔记(二)

MySQL技术内幕-InnoDB存储引擎-读书笔记(二) 作为php开发,使用mysql总是少不了的 系列文章博客链接 http://itsong.net/articles/466.html 第三章 文件 mysql与innodb几个类型的文件 参数文件,配置路径.初始化参数.内存大小等 日志文件,包括错误日志,二进制日志,慢查询日志,查询日志 socket文件,用unix域套接字,unix domain socket来进行连接时需要的文件,这一般是本机连接,比通常tcp快 pid文件,进程id

InnoDb 体系架构和特性 (Innodb存储引擎读书笔记)

后台线程 Master Thread 核心后台线程,主要负责将缓冲池的数据异步刷新到磁盘.例如脏页的刷新,插入缓冲的合并,undo 页的回收等. 每秒一次的操作: 日志缓冲刷新到磁盘,即使该事务还没有提交.该操作总是会发生,这个就是为了再大的事务,提交时间都很短. 当IO压力很小时(1s内发生的IO次数小于5% innodb_io_capacity)合并5% innodb_io_capacity 的插入缓冲. 当脏页比例大于 innodb_max_dirty_pages_cnt, 刷新 inno

MySQL技术内幕-InnoDB存储引擎-读书笔记(一)

MySQL技术内幕-InnoDB存储引擎-读书笔记(一) 作为php开发,使用mysql总是少不了的 博客链接 http://itsong.net/articles/466.html 第一章 MySQL体系结构和存储引擎 MySQL被设计为一个单进程多线程架构的数据库 ./mysql --help | grep my.cnf 可以查看mysql数据库实例启动时,它会在哪些位置查找配置文件. 配置文件中有一个datadir参数,指定了数据库所在的路径.默认为/usr/local/mysql/dat