ASP.NET MVC中的各种上下文对象

先来个图预览一下:

ASP.NET MVC中的各种上下文对象_第1张图片

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 == nullthrow new ArgumentNullException("controller");
            Controller 
= controller;
        }


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

        
public ControllerBase Controller getprivate set; }

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


        
internal static ControllerContext GetControllerContext(ControllerContext controllerContext)
        
{
            
if (controllerContext == nullthrow new ArgumentNullException("controllerContext");
            
return controllerContext;
        }

    }

}

其实它也就是在RequestContext的基础上加了个对Controller的引用(当然是对ControllerBase基类的引用)。

它的几个重载的构造函数以及静态方法写得很有意思,值得借鉴。

3.

你可能感兴趣的:(asp.net)