惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
B
Blog RSS Feed
GbyAI
GbyAI
Google DeepMind News
Google DeepMind News
B
Blog
博客园 - 司徒正美
Vercel News
Vercel News
A
About on SuperTechFans
Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
Recent Announcements
Recent Announcements
S
SegmentFault 最新的问题
博客园_首页
Apple Machine Learning Research
Apple Machine Learning Research
Stack Overflow Blog
Stack Overflow Blog
L
LINUX DO - 热门话题
Y
Y Combinator Blog
F
Full Disclosure
月光博客
月光博客
C
Cyber Attacks, Cyber Crime and Cyber Security
MongoDB | Blog
MongoDB | Blog
The Cloudflare Blog
The Hacker News
The Hacker News
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
A
Arctic Wolf
Scott Helme
Scott Helme
V
Visual Studio Blog
C
Cybersecurity and Infrastructure Security Agency CISA
T
Tor Project blog
P
Privacy International News Feed
Spread Privacy
Spread Privacy
G
GRAHAM CLULEY
Microsoft Security Blog
Microsoft Security Blog
N
News and Events Feed by Topic
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
PCI Perspectives
PCI Perspectives
小众软件
小众软件
博客园 - 【当耐特】
Cloudbric
Cloudbric
S
Secure Thoughts
L
LINUX DO - 最新话题
Google Online Security Blog
Google Online Security Blog
T
Troy Hunt's Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
W
WeLiveSecurity
V
Vulnerabilities – Threatpost
人人都是产品经理
人人都是产品经理
酷 壳 – CoolShell
酷 壳 – CoolShell
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
量子位

博客园 - Andrew Yin

数据访问层组件设计以及选型意识流 第四次扩展的讨论 数据访问层组件设计以及选型意识流 第三次封装(极致、极简而不简单) 数据访问层组件设计以及选型意识流 第二次封装以及各种牢骚 数据访问层组件设计以及选型意识流 第一次封装 数据访问层组件设计以及选型意识流 开篇 UTF-8, Unicode, GB2312三种编码方式解析, 深入研究汉字编码 C++中的模板实例:链表模板 一步一步学Ruby系列(二):Ruby中的函数 一步一步学Ruby系列(一):Ruby基础知识 .NET下的AOP: PostSharp 原理分析 AST,DLR,Expression Tree-----------推荐一位牛人的博客! C# 交互式SHELL C#中的 eval System.Web.Routing命名空间代码解析(四) Route解析中用到的实体类,一些以"Segment”为名的类 System.Web.Routing命名空间代码解析(三) RouteCollection类 System.Web.Routing命名空间代码解析(二) Routing类(上) System.Web.Routing命名空间代码解析(一) RouteBase类,RouteData类,RouteValueDictionary类 有关string和Cookie的几个有用的扩展方法 反射加异步,根据枚举值来异步执行方法 操作Enum的一些实用方法
ASP.NET MVC中的各种上下文对象
Andrew Yin · 2008-12-05 · via 博客园 - Andrew Yin

先来个图预览一下:

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.