Asp.Net路由系统的实现原理是什么

  

Asp.Net路由系统的实现原理是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

创建一个空的WebForm应用程序,在Global.asax。cs文件中加入如下代码:

public  class  Global : System.Web.HttpApplication   {才能   ,,,protected  void  Application_Start (object ,发送方,EventArgs  e)   ,,,{   ,,,,,//处理匹配的文件   ,,,,,RouteTable.Routes.RouteExistingFiles =,真的;   ,,,,,//url默认值   ,,,,,RouteValueDictionary  defaults =, new  RouteValueDictionary (), {, {,“name",,“wuwenmao",},, {,“id",,, 001,,},};   ,,,,,//路由约束   ,,,,,RouteValueDictionary  constraints =, new  RouteValueDictionary (), {, {,“name",, @" \ w 10 {2,},,},, {,“id",, @" \ d {3},,},};   ,,,,,//与路由相关的值,但不参与路由是否匹配URL模式   ,,,,,RouteValueDictionary  dataTokens =, new  RouteValueDictionary (), {, {,“defaultName",,“wuwenmao",},, {,“defaultId",,, 001,,},};   ,,,,,RouteTable.Routes.MapPageRoute (“default",,“员工/{名称}/{id},,,, ~/Default.aspx",,假的,,违约,,约束,dataTokens);   ,,,}   以前,,}

新建名为默认的WebForm页面,页面代码如下:

& lt; % @  Page 语言=癱#“, AutoEventWireup=皌rue",后台代码=癉efault.aspx.cs",继承=癢ebApplication2.Default", %比;      & lt; ! DOCTYPE  html>      & lt; html  xmlns=癶ttp://www.w3.org/1999/xhtml"比;   & lt; head  runat=皊erver"祝辞   & lt; meta  http-equiv=癈ontent-Type",内容=皌ext/html;, charset=utf-8"/比;   & lt;才能title> & lt;/title>   & lt;/head>   & lt; body>   & lt;才能form  id=癴orm1", runat=皊erver"比;   ,,,& lt; h2>这是default . aspx页面& lt;/h2>   & lt;才能div>   ,,   ,,,RouteData中值:   ,,,& lt; ul>   ,,,,,& lt; %, foreach  (var  value  RouteData.Values拷贝)   ,,,,,,,{,%比;   ,,,,,& lt; li>   ,,,,,,,& lt; %=value.Key  %祝辞=& lt; %=value.Value  %比;   ,,,,,& lt;/li>   ,,,,,& lt; %}, %比;   ,,,& lt;/ul>   ,,,RouteData中DataTokens:   ,,,& lt; ul>   ,,,,,& lt; %, foreach  (var  value  RouteData.DataTokens拷贝)   ,,,,,,,{,%比;   ,,,,,& lt; li>   ,,,,,,,& lt; %=value.Key  %祝辞=& lt; %=value.Value  %比;   ,,,,,& lt;/li>   ,,,,,& lt; %}, %比;   ,,,& lt;/ul>   & lt;才能/div>   & lt;才能/form>   & lt;/body>   & lt;/html>

输入路径为一下三种,得到的结果都是一样的:

http://localhost: 2947/员工/wuwenmao/001

http://localhost: 2947/员工/wuwenmao

http://localhost: 2947/员工/

 Asp。净路由系统的实现原理是什么

原因是因为注册路由的时候,为路由模板中的变量设置了默认值,所以当用以上三种url时是等效的。

回头看全球文件中,在注册路由时还设置了一个变量:

 Asp.Net路由系统的实现原理是什么

这是使用正则规则限定了路由模板中变量的值,请求url中对应的变量值只有与正则匹配才能正确请求,否则返回404错误。如id值长度大于3时:

,  Asp.Net路由系统的实现原理是什么

上面通过一个简单的例子体验了一下Asp.Net路由系统、下面我们通过翻看源码来剖析一下Asp。净路由系统的实现原理。

首先,我们全球文件中使用以下语句注册一个路由时,实际上是向全局路由表添加一个路由。

 Asp.Net路由系统的实现原理是什么

通过反射器工具,我们可以看到:

,  Asp.Net路由系统的实现原理是什么

,,,,,null

Asp.Net路由系统的实现原理是什么