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/员工/
原因是因为注册路由的时候,为路由模板中的变量设置了默认值,所以当用以上三种url时是等效的。
回头看全球文件中,在注册路由时还设置了一个变量:
这是使用正则规则限定了路由模板中变量的值,请求url中对应的变量值只有与正则匹配才能正确请求,否则返回404错误。如id值长度大于3时:
,
上面通过一个简单的例子体验了一下Asp.Net路由系统、下面我们通过翻看源码来剖析一下Asp。净路由系统的实现原理。
首先,我们全球文件中使用以下语句注册一个路由时,实际上是向全局路由表添加一个路由。
通过反射器工具,我们可以看到:
,
,,,,,null
Asp.Net路由系统的实现原理是什么