ASP.NET MVC路由(二)

简介:

 ASP.NET MVC路由(二)

 

前言

在上一篇中,提及了Route、RouteCollection对象的一些信息,以及它们的结构所对应的关系。按照处理流程走下来还有遗留的疑问没有解决这个篇幅就来讲解一下。

URL规则的生成

Url规则看名字挺吓唬人的,其实就是根据我们自定义的Url来解析出一个模式,然后等待请求的Url来的时候,跟我们定义的模式进行匹配(如下图)。这是后续的内容。

在上篇中说到URL规则的定义是在Route对象中的,下面来讲解在Route对象***趺锤萦没ё⒉岬腢RL转变成URL规则。

还是用前面的示例来演示,在前篇中说道,在MapRoute方法中的”{control}/{action}/{id}”参数部分代表着要赋值到Route对象的Url属***,也说过在赋值Route对象的Url属***时Set访问器还会做一些其它的操作。例如代码1-1:

代码1-1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  1          public  class  Route
  2         {
  3              private  string  _url;
  4              private  ParsedRoute _parsedRoute;
  5              public  string  Url
  6             {
  7                  get  return  _url; }
  8                  set
  9                 {
10                     _url = value;
11                      //解析Value值
12                      this ._parsedRoute = RouteParser.Parse(value);
13                 }
14             }
15             ……
16         }

这里只是显示了Route对象的一部分用于演示,在代码1-1中,可以看出RouteParser类型负责把接收到的Url值转换成ParsedRoute类型的对象。

这个ParsedRoute类型的对象是Route类型的内部私有类型,而转换而成的Url模式信息就存放在这个类型的对象实例中。请看图1:

图1

图1所示,当一个Url值为”{controller}/{action}”赋值到Route对象的Url属***时,会由RouteParser内部类型的Parse()静态方法来执行Url解析并且转换成ParsedRoute内部类型,而ParsedRoute类型的构造函数是由PathSegment类型的集合构成。而在MVC框架中并不是使用PathSegment类型的,而是使用PathSegment类型的的派生类(如图2),并且这些派生类分别对应着不同的Url片段,就好比示例的”{controller}/{action}”就会分别的表示为两种类型(下面会讲到)。

图2

正如图2所示的对象模型,按照图2的模型结构。这个时候ParsedRoute内部所存的Url模式值为图3所示,

图3

如图3所示上述示例中的“controller”生成为ContentPathSegment类型,而“/”则被生成为SeparatorPathSegment类型。对于这些类型的具体细节这里就不做详细的介绍了。目的在于只是把内部的实现粗略的把对象模型说明一下,目的就是让大家知道有这么一个过程来生成URL规则,并且是什么样的一个实现的方式,让大家知道Route对象的本身就是带有URL规则的,在服务器请求到来的时候是众多Route对象根据自身携带的URL规则来进行匹配,这部分内容后续说到。

如果感兴趣想清晰的知道内部实现的具体,可以自己用反编译工具来看里面的源代码,这部分的Url规则的生成过程就讲到这里。

希望看完后大家能够记住大概的流程和这些对象在系统中的位置。会在下一篇幅讲解RouteData的是怎么根据请求的Url来匹配生成的。





     本文转自jinyuan0829 51CTO博客,原文链接:http://blog.51cto.com/jinyuan/1423994,如需转载请自行联系原作者







相关文章
|
1月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
34 7
|
1月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
47 0
|
2月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
40 0
|
2月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
|
2月前
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
104 0
|
5月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
169 0
|
5月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
73 0
|
5月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
300 5
|
5月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
|
5月前
mvc.net分页查询案例——mvc-paper.css
mvc.net分页查询案例——mvc-paper.css