Route学习笔记
前言
UrlRoutingModule.class;这块的代码关联了上一篇中路由部分的一个详细说明
一:Route的讲解
1. 路由模板匹配
添加路由: MapRoute
剔除的路由:IgnoreRoute
2. 简单看mapRoute 和IgnoreRoute的源码。
RouteTable
=> Routes [RouteCollection]
=> Route 【就是我们定义的路由模板】
① 构建: [MvcRouteHandler]
Route item = new Route(url, new MvcRouteHandler()) {
Defaults = CreateRouteValueDictionary(defaults),
Constraints = CreateRouteValueDictionary(constraints),
DataTokens = new RouteValueDictionary()
};
② 加入到Collection中去
routes.Add(name, item); IgnoreRoute =>
① 构建: 【[StopRoutingHandler]】
IgnoreRouteInternal item = new IgnoreRouteInternal(url) {
Constraints = new RouteValueDictionary(constraints)
};
② 加入到Collection中去
routes.Add(item);
结论:
通过源码,我们发现,Ignore和Map都是构建Route,然后添加到RouteCollection中去。。。
不一样地方在哪里????
MapRoute,我们加入的Handler是 MVCRouteHanlder。。。
IgnoreRoute 我们的Handler 是 StopRoutingHandler
过程:
http => foreach 去找Route,如果Route被匹配,同时还要判断该Route的handler是什么类型,如果是StopRoutingHandler,则直接跳出。
否则,GetRouteData
二:constraints约束
就是对url模板的参数进行限定;eg: {controller}/{action}/{id} 模板。。。
可以对id进行限定,对action参数进行限定,,,,controller进行限定。。。
1. 我想做到输入的url模板中,id只能是整数 。。。。
routes.MapRoute(
name:"Defaults",
url:"{controller}/{action}/{id}}",
defaults:"new{controller="Home",action="Index",id=UrlParameter.Optional},
constraints:new{ id=@"\d+" }
);
从源码中发现,connstraint中可以定义两种约束,第一种字符串,第二种自定义。
bool ProcessConstraint(HttpContextBase httpContext,object constraints,string parameterName,...)
{
object obj2;
//判断是否是自定义约束
IRouteConstraint constraint2=constraint as IRouteConstraint;
if(constraint2!=null){
return constraint2.Match(httpContext,this,values,routeDirection);
}
//如果是系统约束判断字符串
string str=constraint as string;
if(str==null){...}
values.TryGetValue(parameterName,out obj2);
return Regex.IsMatch(正则匹配)
}
2. 自定义约束:IRouteConstraint
public class MyRoute:IRouteConstraint{
match(....){
//values是真正的值字典
var id=values[parameterName];
}
}
Route学习笔记的更多相关文章
- Route学习笔记之Area的Route注册
前一段时间接触了MVC的Area可以将模型.控制器和视图分成各个独立的节点.分区之后,区域路由注册的需求就出来了. 默认的 在MVC项目上右键添加区域之后,在文件夹下会自动添加一个FolderName ...
- (学习笔记)laravel 中间件
(学习笔记)laravel 中间件 laravel的请求在进入逻辑处理之前会通过http中间件进行处理. 也就是说http请求的逻辑是这样的: 建立中间件 首先,通过Artisan命令建立一个中间件. ...
- MyCat 学习笔记 第十篇.数据分片 之 ER分片
1 应用场景 这篇来说下mycat中自带的er关系分片,所谓er关系分片即可以理解为有关联关系表之间数据分片.类似于订单主表与订单详情表间的分片存储规则. 本文所说的er分片分为两种: a. 依据主键 ...
- MyCat 学习笔记 第九篇.数据分片 之 数值分布
1 应用场景 Mycat 自带了多套数据分片的机制,其实根据数值分片也是比较简单,其实这个和数据取摸是类似的实现. 优.缺点同上一篇 2 环境说明 参考 <MyCat 学习笔记>第六篇. ...
- MyCat 学习笔记 第八篇.数据分片 之 求摸运算分片
1 应用场景 Mycat 自带了多套数据分片的机制,其实根据数值取摸应该是最简单的一种. 优点:数据离散概率较为平均,可以有效的提高应用的数据吞吐. 缺点:比较明显,后期数据运维与迁移比较困难.好在M ...
- MyCat 学习笔记 第七篇.数据分片 之 按数据范围分片
1 应用场景 Mycat 其实自带了2个数据范围分片的方案,一个是纯数据范围的分片,比如 1至 10000 号的数据放到分片1 ,10001 至 20000号数据放到分片2里. 另一个是数据常量形式的 ...
- NSURLSession学习笔记
NSURLSession学习笔记(一)简介 一.URL Session的基本概念 1.三种工作模式: 默认会话模式(default):工作模式类似于原来的NSURLConnection,使用的是基于磁 ...
- phalcon(费尔康)框架学习笔记
phalcon(费尔康)框架学习笔记 http://www.qixing318.com/article/phalcon-framework-to-study-notes.html 目录结构 pha ...
- <老友记>学习笔记
这是六个人的故事,从不服输而又有强烈控制欲的monica,未经世事的千金大小姐rachel,正直又专情的ross,幽默风趣的chandle,古怪迷人的phoebe,花心天真的joey——六个好友之间的 ...
随机推荐
- Retrofit进行post提交json数据
1:先看一看xutils3的提交代码 String account = editText1.getText().toString(); String password = editText2.getT ...
- 【Oracle】回收站
☆回收站概念 oracle从10g开始,引入回收站(Recycle Bin)概念.回收站的全称叫:Tablespace Recycle Bin.回收站是一个逻辑区域,oracle并没有为它分配物理空间 ...
- C#中null、""、string.empty区别
(1)NULLnull 关键字是表示不引用任何对象的空引用的文字值.null 是引用类型变量的默认值.那么也只有引用型的变量可以为NULL,如果int i=null,的话,是不可以的,因为Int是值类 ...
- Java 类 对象 包
Java类和对象 类是具有相同属性和行为的一组对象的集合.(属性是用来描述对象的特征可以理解为成员变量 例如:一个学生(对象)他的类可能是学校,它的属性可能是学号,姓名,年龄,班级,成绩等等) 例子: ...
- 2014 Container技术大会:未来Linux Container会是PaaS平台的核心
不应错过2014 Container技术大会的九大理由. 一.Docker官方人员再次来到北京,首次向中国布道Docker技术.2013年Docker高级软件工程师Jerome Petazzoni,曾 ...
- 杭电2053 WA
#include<stdio.h> int main() { ]; while(scanf("%d",&n)!=EOF) { ;i<=;i++) { a[ ...
- jQuery删除元素
remove() - 删除被选元素(及其子元素) empty() - 从被选元素中删除子元素 $("#div1").remove();删除被选元素及其子元素. $("#d ...
- UWP添加数字证书导出安装包本地安装
先生成一个简单的HelloWorld应用程序 <Page x:Class="HelloWorld.MainPage" xmlns="http://schemas.m ...
- JS 从100里面随机取10个数比大小
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Python编程:从入门到实践 - matplotlib篇 - Random Walk
随机漫步 # random_walk.py 随机漫步 from random import choice class RandomWalk(): """一个生成随机漫步数 ...