学习ASP.NET MVC5框架揭秘笔记-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 对象。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值