[读书笔记]ASP.NET的URL路由引擎
作用
一般的URL:
举例:http://www.myapp.com/app.aspx?id=2&sessionid=29320xafafa02fa0zga0g8a0z
缺点:
- 不美观,不清晰
- 搜索引擎不友好,爬虫无法知道文件名后的更多地产品分类
因此,需要把它映射成更简单易用、涵盖信息更广的URL。
路由映射基础
相关类:RouteCollection
命名空间:System.Web.Routing
方法:RouteCollection.MapPageRoute(),实例方法
基本思路:要使用URL路由引擎,首先注册路线图。路线图只是从路径表达式到磁盘上的实际页面的一个映射。这些路径在应用程序启动时注册,注册操作通常包含在单独的方法中,如下面代码所示,代码段来自Global.asax.cs文件:
void Application_Start(object sender,EventArgs e)
{
//Code that runs on application startup
InitializeRoutes(RouteTable.Routes);
}
private void InitializeRoutes(RouteCollection routes)
{
//...perform route registration
routes.MapPageRoute(...);
}
注:routes为RouteCollection的实例
下面总结URL路由的用法,基本上就是RouteCollection.MapPageRoute()的各种重载方法。
1.映射基础URL
routes.MapPageRoute("login","login","~/Login.aspx);
2.映射包含参数的URL
routes.MapPageRoute("blog","blog/{year}/{month}/{day}","~/Blog.aspx");
参数的查询不能通过Request.queryString来获取,因为参数并不是查询字符串的一部分,参数存在RouteData字典中。正确代码如下:
protected void Page_Load(object sender,EventArgs e)
{
string year=RouteData.Values["year"] as string;
string month=RouteData.Values["month"] as string;
string day=RouteData.Values["day"] as string;
//Perform blog processing based on date parameters
}
3.映射包含多个段的URL
将一个星号(“*”)置于命名参数之前:
routes.MapPageRoute("products-by-tag","products/tags/{*tagnames}","~/ProductsByTag.aspx");
其中,tagnames中的各字段用单斜线(“/“)分割。
4.使用包含默认参数的路由
routes.MapPageRoute("category-browse","category/{categoryname}","~/Category.aspx",true,
new RouteValueDictionary()
{
{"categoryname","explosives"}
});
注意的是,目标页面无需知道是否使用的时默认值,仅需从RouteData字典中捕获类别名称即可。
5.使用约束路由
这些约束采用正则表达式进行。
routes.MapPageRoute(
routeName:"constrained-blog",
routeUrl:"cblog/{year}/{month}/{day}",
physicalFile:"~/Blog.aspx",
checkPhysicalUrlAccess:True,
defaults: new RouteValueDictionary({{"year",DateTime.Now.Year.ToString()},...},
constraints:new RouteValueDictionary() {
{"year",@"\d{0,4}"},
{"month",@"\d{0,2}"},
{"day",@"\d{0,1}" }
}
);
[读书笔记]ASP.NET的URL路由引擎的更多相关文章
- asp.net MVC URL路由入门指南
asp.net MVC 的URL路由是一个非常强大的功能,而且有个优点:强大单不复杂.然而,目前我在网上看到的相关资料,却都仅仅提供一些示例,仅通过这些示例,初学者基本上不可能明白为什么要这么配置,更 ...
- ASP.NET MVC——URL路由
在MVC之前,ASP.NET假设请求的URL与服务器上的文件之间有关联,服务器接受请求,并输出相应的文件.而在引入MVC后,请求是由控制器的动作方法来处理的.为了处理URL,便引入了路由系统. 首先我 ...
- MySQL技术内幕读书笔记(二)——InnoDB存储引擎
目录 InnoDB存储引擎 InnoDB存储架构 Checkpoint技术 Master Thread 工作方式 InnoDB关键特性(放一下,感觉看后面,再看总结吧) InnoDB存储引擎 Inno ...
- 【读书笔记】iOS-自定义 URL Scheme 完全指南
iPhone / iOS SDK 最酷的特性之一就是应用将其自身”绑定”到一个自定义 URL scheme 上,该 scheme 用于从浏览器或其他应用中启动本应用. 注册自定义 URL Sche ...
- 【读书笔记】iOS-自定义URL Scheme注意事项
如果两个不同的应用注册了同样的URL Scheme,那么后安装的应用会响应符合这种协议格式的URL. 如果你的应用的iPhone和iPad版是各自独立的(即不是Universal类型的),那么你就不应 ...
- 《大数据日知录》读书笔记-ch1数据分片与路由
目前主流大数据存储使用横向扩展(scale out)而非传统数据库纵向扩展(scale up)的方式.因此涉及数据分片.数据路由(routing).数据一致性问题 二级映射关系:key-partiti ...
- 《深入理解 Java 虚拟机》读书笔记:虚拟机字节码执行引擎
正文 执行引擎是 Java 虚拟机最核心的组成部分之一.在不同的虚拟机实现里,执行引擎在执行 Java 代码时可能会有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择,也 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (21) -----第四章 ASP.NET MVC中使用实体框架之在页面中创建查询和使用ASP.NET URL路由过虑
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 4.2. 构建一个搜索查询 搜索数据是几乎所有应用的一个基本功能.它一般是动态的,因 ...
- [译]ASP.NET Core 2.0 路由引擎
问题 ASP.NET Core 2.0的路由引擎是如何工作的? 答案 创建一个空项目,为Startup类添加MVC服务和请求中间件: public void ConfigureServices(ISe ...
随机推荐
- 关于Latent Dirichlet Allocation
今天,也没出去,晚上宿舍没有人,自己思考了下人生,毕设还是大事,觉得现在有必要把LDA从前往后彻彻底底的读一遍了,因为现在的感觉就是什么都知道一点皮毛,但是理解的都不深,LDA好像(恩,相当不好)现在 ...
- yii2.0 url 跳转
//转发 $this->render('page1',['id'=>3,'mark'=>2]); //显示page1页面 并传递 id mark 2个参数 //重定向 $thi ...
- Android画柱状图,圆形图和折线图的demo
效果图如下: demo下载地址:http://files.cnblogs.com/hsx514/wireframe.zip
- 定时组件quartz系列<一>模拟定时组件小程序
一.核心概念 Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可. 1.Job表示一个工作,要执行的具体内容.此接口中只有一个方法void execute(Jo ...
- 三 最简单的 AndEngine 程序框架
package com.example.AndEngineExample; import org.anddev.andengine.engine.Engine;import org.anddev.an ...
- html中的特殊符号
html中的特殊符号 符号 说明 编码 符号 说明 编码 符号 说明 编码 " 双引号 " × 乘号 × ← 向左箭头 ← & AND符号 & ÷ 除号 ÷ ...
- DataTable添加列和行的三种方法
JRoger 原文 #region 方法一: DataTable tblDatas =new DataTable("Datas"); DataColumn dc =null; dc ...
- Java中的OutOfMemoryError的各种情况及解决和JVM内存结构
在JVM中内存一共有3种:Heap(堆内存),Non-Heap(非堆内存) [3]和Native(本地内存). [1] 堆内存是运行时分配所有类实例和数组的一块内存区域.非堆内存包含方法区和JVM内部 ...
- cookie跨域,跨目录访问及单点登录。
首先普及下域名的知识: 域名: baidu.com // 一级域名 A play.baidu.com // 二级域名 B abc.play.baidu.com // 三级域名 C 数有几 ...
- jQuery对select标签的常用操作
1.获取当前选中项的value. $("#selector").val(); 2.获取当前选中项的text. $("#selector").find(" ...