[读书笔记]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 ...
随机推荐
- linux 命令部分说明
shell 文件头格式 #! /bin/sh 定义变量 dir_tmp=/tmp/xxx 级联创建 mkdir -p /etc/aaa/bbb 阻塞命令 等待用户输入回车 继续 read ...
- jQuery - 实时统计输入框输入个数(中文输入法适用)
经常在实时统计文本框输入多少字的时候,有时会出现不及时统计,特别是在中文输入法下. 为了实时准确统计,可以修改代码如下: $(function() { $("#txtT ...
- Java条件语句之 switch
当需要对选项进行等值判断时,使用 switch 语句更加简洁明了.例如:根据考试的名次,给予前 4 名不同的奖品.第一名,奖励笔记本一台:第二名,奖励 IPAD 2 一个:第三名,奖励移动电源一个:最 ...
- 通过文件流stream下载文件
public ActionResult ShowLocalizedXML(int id) { string orderName = ""; string xmlString = G ...
- ANDROID模拟器访问本地WEB应用
一个早上就是想让android的模拟器可以访问到web的应用程序,但是一直是不可以,弄的不知所措. 在一般的Java Web程序开发中,我们通常使用localhost或者127.0.0.1来访问本机的 ...
- sqlplus常用命令
原文 sqlplus常用命令 desc 表名 显示表的结构 show user 显示当前连接用户 show error 显示错误 sho ...
- 基类,派生类,内存分配情况 .xml
pre{ line-height:1; color:#1e1e1e; background-color:#d2d2d2; font-size:16px;}.sysFunc{color:#627cf6; ...
- grails中报Cannot create a session after the response has been committed异常的解决办法
在grails中,我们在layouts\main.gsp中使用类似如下的代码来判断当前用户处于登录状态时显示相关的登录信息: <g:if test="${session.users}& ...
- ansible安装及问题解决
本文主要用来安装ansible,在进行安装的时候,也可以使用其他的版本进行安装,本文主要讲述安装ansible的步骤,还有常用问题的解决. 1.查看python版本 由此可以看到python的版本为2 ...
- 简易nagios安装出现的问题及解决方法
安装时候所遇到的问题: A 安装PHP的时候报错xml2-config未找到 安装PHP的时候报错:未找到包libxml2 解决方法:安装libxml2包即可,libxml2是php的依赖包,从而需要 ...