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——六个好友之间的 ...
随机推荐
- Sublime Text3 插件记录
插件官网 其他插件安装之前,先安装 Package Control: 快捷键Ctrl+`或View > Show Console打开控制台. 输入以下 Python 代码,回车. import ...
- poj1111 Image Perimeters 广搜
题目大意: 输入一个矩阵,再输入其中一个“X”的位置(从1开始).从该位置向八个方向扩展,如果是“X”就可以并在一起.问最后得到的模块的周长是多少. 解题思路: 按照广搜的思路来做.用一个二维的数组标 ...
- RabbitMQ学习之spring配置文件rabbit标签的使用
下面我们通过一个实例看一下rabbit的使用. 1.实现一个消息监听器ReceiveMessageListener.Java package org.springframework.amqp.core ...
- css常用代码大全以及css兼容(转载)
css常见的快捷开发代码汇总(长期更新),包括CSS3代码,有一些css效果很顽固,经常会一时找不出解决方案,网络上也有很多的工具和高手提供了具体的浏览器兼容代码,这个页面我今后会经常整理,希望能够帮 ...
- Redmine 甘特图导出 PDF 和 PNG 中文乱码问题
Redmine使用了RMagick来处理图片,fpdf处理PDF,并在调用时设定了字体PDF中文字体 redmine 中关于PDF字体设置的代码 case pdf_encoding ...
- windows 端口号占用和解决方法
https://blog.csdn.net/qq_39657909/article/details/80378983
- centos7 选定默认启动内核,及删除无用内核
#使用cat /boot/grub2/grub.cfg |grep menuentry 查看系统可用内核 [root@bigapp-slave27 ~]# cat /boot/grub2/grub.c ...
- Win 10安装mysql以及常见问题总结
一.mysql免安装版本配置1.从官网下载安装包,解压后,在电脑属性环境变量的path中配置bin的路径 2.配置my.ini [mysql] # 设置mysql客户端默认字符集 default-ch ...
- 【vue】v-if和v-show的区别
今天来捋一下vue中的v-if与v-show的区别 先来看一下vue官方文档对他们的解释 2.从实现方式来看: v-if是当依赖的值变为false时,直接让元素消失,html代码也会消失,相当于直接在 ...
- BZOJ 3878 [AHOI&JSOI2014]奇怪的计算器 (线段树)
题面:BZOJ传送门 洛谷传送门 线段树好题 题目保证$a$一定是正整数,容易发现计算结果是单调的 我们把询问离线,并按照从小到大排序 某次操作可能导致某些位置达到边界$L/R$ 根据单调性的结论 这 ...