























先来个图预览一下:

1.首先是System.Web.Routing下的RequestContext类,代码相当简单,把HttpContextBase和RouteData放在一起就OK了。
Code
关于RouteData,我以后会讲的,现在只需要知道它存储了Route信息,从URL中根据Route规则Map到的参数值都在里面。
2.接着就是ControllerContext类了,这个类很有意思:
using System.Security.Permissions;

namespace System.Web.Mvc
{
using System.Web.Routing;

[AspNetHostingPermission(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
public class ControllerContext : RequestContext
{
protected internal ControllerContext(ControllerContext controllerContext)
: this(GetControllerContext(controllerContext), GetControllerContext(controllerContext).Controller) {}

public ControllerContext(HttpContextBase httpContext, RouteData routeData, ControllerBase controller)
: base(httpContext, routeData)
{
if (controller == null) throw new ArgumentNullException("controller");
Controller = controller;
}

public ControllerContext(RequestContext requestContext, ControllerBase controller)
: this(
GetRequestContext(requestContext).HttpContext, GetRequestContext(requestContext).RouteData, controller) {}

public ControllerBase Controller { get; private set; }

internal static RequestContext GetRequestContext(RequestContext requestContext)
{
if (requestContext == null) throw new ArgumentNullException("requestContext");
return requestContext;
}

internal static ControllerContext GetControllerContext(ControllerContext controllerContext)
{
if (controllerContext == null) throw new ArgumentNullException("controllerContext");
return controllerContext;
}
}
}
其实它也就是在RequestContext的基础上加了个对Controller的引用(当然是对ControllerBase基类的引用)。
它的几个重载的构造函数以及静态方法写得很有意思,值得借鉴。
3.
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。