Route学习笔记

前言

  UrlRoutingModule.class;这块的代码关联了上一篇中路由部分的一个详细说明

一:Route的讲解

1. 路由模板匹配

添加路由: MapRoute

剔除的路由:IgnoreRoute

2. 简单看mapRoute 和IgnoreRoute的源码。

 1 RouteTable
 2     =>   Routes [RouteCollection]
 3     =>  Route 【就是我们定义的路由模板】
 4         ① 构建: [MvcRouteHandler]
 5            Route item = new Route(url, new MvcRouteHandler()) {
 6                     Defaults = CreateRouteValueDictionary(defaults),
 7                     Constraints = CreateRouteValueDictionary(constraints),
 8                     DataTokens = new RouteValueDictionary()
 9                    };
10         ② 加入到Collection中去
11            routes.Add(name, item);
12
13     IgnoreRoute =>
14       ① 构建: 【[StopRoutingHandler]】
15                 IgnoreRouteInternal item = new IgnoreRouteInternal(url) {
16                     Constraints = new RouteValueDictionary(constraints)
17                 };
18       ②  加入到Collection中去
19       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中可以定义两种约束,第一种字符串,第二种自定义。

 1 bool ProcessConstraint(HttpContextBase httpContext,object constraints,string parameterName,...)
 2    {
 3         object obj2;
 4         //判断是否是自定义约束
 5         IRouteConstraint constraint2=constraint as IRouteConstraint;
 6         if(constraint2!=null){
 7             return constraint2.Match(httpContext,this,values,routeDirection);
 8         }
 9         //如果是系统约束判断字符串
10         string str=constraint as string;
11         if(str==null){...}
12         values.TryGetValue(parameterName,out obj2);
13         return Regex.IsMatch(正则匹配)
14    }

2. 自定义约束:IRouteConstraint

public class MyRoute:IRouteConstraint{
    match(....){
        //values是真正的值字典
        var id=values[parameterName];
    }
}
时间: 2024-10-06 21:52:09

Route学习笔记的相关文章

Route学习笔记之Area的Route注册

前一段时间接触了MVC的Area可以将模型.控制器和视图分成各个独立的节点.分区之后,区域路由注册的需求就出来了. 默认的 在MVC项目上右键添加区域之后,在文件夹下会自动添加一个FolderNameAreaRegistration.cs的文件. public class AdminAreaRegistration : AreaRegistration { public override string AreaName { get { return "Admin"; } } publi

ASP.NET Route学习笔记(1)

注:本文很多部分知识来自于蒋金楠老师的<ASP.NET MVC框架解密>,本人写纯粹是用作个人笔记,假如侵犯了您的权益,请联系我,我立刻删除 在ASP.NET MVC中URL路由通过对请求的URL进行解析,得到以Controller和Action名称为核心的路由数据.但是URL路由系统并不是专属于ASP.NET MVC的,而是直接建立在ASP.NET上,在System.Web.Routing 命名空间下,所以WebForm也可以使用路由对请求地址与物理文件的分离. 好的Url应该满足如下条件:

ICMP:Internet控制报文协议实现学习笔记

ICMP是网络层的一个协议,可以看作IP协议的附属协议,因为它主要被IP用来与其他主机或路由器交换错误报文及其他需要注意的信息.当然,更高层协议(tcp/udp)甚至有些用户进程也可能用到ICMP报文 注册ICMP协议和ICMP协议的处理涉及以下文件: net/ipv4/icmp.c ICMP协议处理入口 net/ipv4/af_inet.c 网络层和传输层接口 ICMP报文结构 参见tcp/ip协议学习笔记(5)Internet Control Message Protocol(ICMP) 注

LVS学习笔记--DR模式部署

一.部署环境: 服务器版本:CentOS6.5(Finnal) 网络拓扑: 二.需求分析:调度服务器与网页服务器均在同一网段局域网环境,用户提交的请求会经过调度器的分配指定到网页服务器,同时保证服务高可用性(任意一台网站服务器宕机后调度器会剔除它直至服务器恢复至正常:主调度器宕机后从调度器会接管它直至其恢复正常.). 三.相关配置: 部署调度器LVS服务脚本: #!/bin/sh mkdir tools cd tools/ # yum install lrzsz # rz # ls wget h

[Pro Angular.JS]学习笔记1.1:设置开发环境

可以使用yeoman.io,很方便.我已经写了一篇随笔,介绍如何使用.这里也有一篇介绍的文章:http://www.cnblogs.com/JoannaQ/p/3756281.html 代码编辑器,在Mac下用了一下WebStorm,太恶心了.另外发现书的作者使用的开发环境是Windows + VS Express 2013,为了方便学习,我也使用VS Express 2013 Update2.VS2013用起来蛮舒服的,把WebStorm比得跟驼屎一样.也许是因为我没用习惯吧. 1.安装Nod

【转】TCP/IP详解学习笔记(二)

TCP/IP详解学习笔记(5)-IP选路,动态选路,和一些细节 1.静态IP选路 1.1.一个简单的路由表 选路是IP层最重要的一个功能之一.前面的部分已经简单的讲过路由器是通过何种规则来根据IP数据包的IP地址来选择路由.这里就不重复了.首先来看看一个简单的系统路由表. Destination     Gateway         Genmask         Flags Metric Ref    Use Iface192.168.11.0    *               255.

&lt;老友记&gt;学习笔记

这是六个人的故事,从不服输而又有强烈控制欲的monica,未经世事的千金大小姐rachel,正直又专情的ross,幽默风趣的chandle,古怪迷人的phoebe,花心天真的joey——六个好友之间的情路坎坷,事业成败和生活中的喜怒哀乐,无时无刻不牵动着彼此的心,而正是正平凡的点点滴滴,却成为最令人感动与留恋的东西. 人物:1.瑞秋•格林(RACHEL GREENE)由珍妮佛•安妮斯顿(Jennifer Aniston)扮演 瑞秋是莫妮卡的高中同学,在与牙医未婚夫的婚礼上脱逃至莫妮卡处. 2.罗

MyCat 学习笔记 第十篇.数据分片 之 ER分片

1 应用场景 这篇来说下mycat中自带的er关系分片,所谓er关系分片即可以理解为有关联关系表之间数据分片.类似于订单主表与订单详情表间的分片存储规则. 本文所说的er分片分为两种: a. 依据主键进行数据分片,验证发现主表数据保存在第1个datanode中,子表数据根据分片规则存储. b. 依据分片关键字段进行分片,验证发现主表与子表根据分片规则存储,且保存在相同的分片内. 接下来,可以下实际配置与数据验证 2 环境说明 参考  <MyCat 学习笔记>第六篇.数据分片 之 按月数据分片 

Puppet学习笔记(CentOS6.3+Puppet3.01)

Puppet学习笔记(CentOS6.3+Puppet3.01) 技术 Add comments Oct262012 下了决心,好好学习puppet,周末专门去参加一个puppet的培训,难得朋友那么热心,组织大家一起去学习.我就提前做一下功课. 2012年10月29日:参加完两天的培训,深刻体会到puppet的强悍,当然讲Puppet的朋友,还是非常有经验,不只是puppet经验,还有讲课的经验,学习一个新东西的经验.一个最大的收获:官方的文档非常好,把puppet读完,你就差不多. Cont