总的来说,我们可以通过RouteTable的静态属性Routes得到一个针对整个应用的全局路由表。通过上面的介绍我们知道这是一个RouteCollection对象,可以通过调用它的MapPageRoute方法注册某个物理文件的路径与某个路由模板的匹配关系。路由注册的核心在于根据提供的路由规则(路由模板、约束、默认值等)创建一个Route对象,并将其添加到这个全局路由表中。接下来我们通过实例演示的方式来说明路由注册的一些细节问题。
前面给出了一个获取天气预报信息的路由模板,现在我们在一个ASP.NET Web应用中创建一个Weather.aspx页面。不过我们并不打算在该页面中呈现任何的天气信息,而是将相关的路由信息呈现出来。该页面主体部分的HTML如下所示,我们不仅将基于当前页面的RouteData对象的Route和RouteHandler属性类型输出,还将存储于Values和DataTokens属性的变量显示出来
<form id="form1" runat="server"> <div> <table class="table table-bordered"> <tr> <td>Route:</td> <td><%=RouteData.Route != null? RouteData.Route.GetType().FullName:"" %></td> </tr> <tr> <td>RouteHandler:</td> <td><%=RouteData.RouteHandler != null? RouteData.RouteHandler.GetType().FullName:"" %></td> </tr> <tr> <td>Values:</td> <td> <ul> <%foreach (var variable in RouteData.Values) {%> <li> <%=variable.Key%>=<%=variable.Value%></li> <% }%> </ul> </td> </tr> <tr> <td>DataTokens:</td> <td> <ul> <%foreach (var variable in RouteData.DataTokens) {%> <li> <%=variable.Key%>=<%=variable.Value%></li> <% }%> </ul> </td> </tr> </table> </div> </form>
在添加的Global.asax文件中,我们将路由注册操作定义在Application_Start方法中。如下面的代码片段所示,映射到Weather.aspx页面的路由模板为“{areacode}/{days}”。在调用MapPageRoute方法的时候,我们还为定义在路由模板中的两个变量指定了默认值及基于正则表达式的约束。除此之外,我们还在注册的Route对象的DataTokens属性中添加了两个路由变量,他们表示对变量默认值的说明(defaultCity:Beijing;defaultDays:2)。顺便说一下,MapPageRoute方法中布尔类型的参数checkPhysicalUrlAccess表示是否需要对表示被路由的目标地址的URL实施授权(针对原请求地址的URL授权总是会执行)。
public class Global : System.Web.HttpApplication { protected void Application_Start(object sender, EventArgs e) { var defaults = new RouteValueDictionary { { "areacode", "010" }, { "days", 2 }}; var constaints = new RouteValueDictionary { { "areacode", @"0\d{2,3}" }, { "days", @"[1-3]" } }; var dataTokens = new RouteValueDictionary { { "defaultCity", "BeiJing" }, { "defaultDays", 2 } }; RouteTable.Routes.MapPageRoute("default", "{areacode}/{days}","~/weather.aspx", false, defaults, constaints, dataTokens); } }
学习ASP.NET MVC5框架揭秘笔记-ASP.NET路由(九)
原文地址:http://blog.csdn.net/yejinwei1220/article/details/46003675