码迷,mamicode.com
首页 > Web开发 > 详细

学习ASP.NET MVC5框架揭秘笔记-ASP.NET路由(四)

时间:2015-05-21 10:50:17      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:.net   mvc   asp.net   

2.RouteData

我们现在来看看用于封装路由数据同时作为GetRouteData方法返回值的RouteData。如下面代码片段所示,RouteData具有一个类型为RouteBase的属性Route,该属性返回生成此RouteDataRoute对象。不过这是一个可读/写的属性,我们可以使用任意一个Route对象来对此属性进行赋值。

public class RouteData
{
public RouteData();
public RouteData(RouteBase route,IRouteHandler routeHandler);
public string GetRequiredString(string valueName);
public RouteBase Route { set; get; }
public IRouteHandler RouteHandler { set; get; }
public RouteValueDictionary Values { get; }
public RouteValueDictionary DataTokens { get; }
}

RouteDataValuesDataTokens属性都返回一个RouteValueDictionary的对象。RouteValueDictionary是一个实现了IDictionary<string,object>接口的字典。ASP.NET路由系统利用此对象来保存路由变量,字典元素KeyValue分别表示变量的名称和值。存储于ValuesDataTokens这两个属性中的路由变量的不同之处在于:前者通过对请求URL进行解析得到的,后者则是直接附加到路由对象上的自定义变量。

在某些路由场景中,我们要去Route针对请求进行路由解析得到的变量集合(Values属性)中必须包含某些固定名称的变量值(比如ASP.NET MVC应用中表示ControllerAction名称的变量),RouteDataGetRequiredString方法用于获取他们的值。对于该方法的调用,如果指定名称的变量在Values属性中不存在,它会直接抛出一个InvalidOperationException异常。

RouteData通过其RouteHandler属性返回一个RouteHandler对象。RouteHandler在整个路由系统中具有重要的地位,因为最终用于处理请求的HttpHandler对象由它提供,所有的RouteHandler类型均实现了具有如下定义的IRouteHandler接口,HttpHandler的提供实现在它的GetHttpHandler方法中。我们可以在构造函数中对RouteDataRouteHandler属性进行初始化,也可以直接对这个可读/写的属性进行赋值。

public interface IRouteHandler
{
IHttpHandler GetHttpHandler(RequestContext requestContext);
}
当请求被成功路由到某个.aspx页面后,通过调用匹配Route对象的GetRouteData方法生成的RouteData被直接附加到目标页面对应的page对象上。Page具有一个类型为RouteData的同名只读属性,它返回的正是这个RouteData对象。

学习ASP.NET MVC5框架揭秘笔记-ASP.NET路由(四)

标签:.net   mvc   asp.net   

原文地址:http://blog.csdn.net/yejinwei1220/article/details/45888259

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!