HttpContext, HttpContextBase和HttpContxtWrapper

HttpContext

HttpContext是ASP.Net中的context对象。但是使用这个类的问题在于,它没有基类,而且不是virtual函数。这样,我们在写unit test的时候没有办法mock它。因此,建议是不要把HttpContext作为参数传递,而是用HttpContextBase替代。

HttpContextBase

这是在C# 3.5中的新特性,用于取代HttpContext。由于该类是抽象类,因此是可以mock的。

HttpContextWrapper

这个类也是在C#3.5中引入的。它是HttpContextBase的具体实现。在一个webpage中创建一个HttpContextWrapper,可这么做

new HttpContextWrapper(HttpContext.Current) as HttpContextBase

Reference:

http://www.splinter.com.au/httpcontext-vs-httpcontextbase-vs-httpcontext/

时间: 2024-11-10 08:13:34

HttpContext, HttpContextBase和HttpContxtWrapper的相关文章

第17章 控制器可扩展性

---------------------------------------------- 提示:.net 4.0 使用 async 和 await 时:Nuget中 加载 Microsoft.Bcl.Async ! ---------------------------------------------- 一.控制器工厂(IControllerFactory) 1.作用:负责创建对请求进行服务的控制器实例 2.方法:(1)CreateController(RequestContext re

[译]MVC应用程序生命周期

原文:MVC Application Lifecycle 来一探究竟在MVC应用程序中参与请求处理的各个不同组件. 目录: 序言 背景 UrlRoutingModule RouteHandler MvcHandler ControllerFactory Controller ActionInvoker ActionResult ViewEngine 总结 关注点 序言 在这篇文章中我们将讨论MVC应用程序生成周期以及当请求从一个组件传到另一个组件时是如何被处理的.我们将说说这些在应用程序生命周期

mvc4中的过滤器

过滤器(Filter)把附加逻辑注入到MVC框架的请求处理.实现了交叉关注. 交叉关注:用于整个应用程序,又不适合放在某个局部位置的功能. 过滤器是.NET的注解属性(Attribute),它们对请求处理管道添加了额外的步骤. 注解属性是派生于System.Attribute的特殊的.NET类. 可以被附加到类.方法.属性.字段等代码元素上.其目的是把附加信息嵌入到已编译的代码中,以便在运行时读回这些信息. 过滤器的基本类型: 过滤器类型 接口 默认实现 描述 Authorization IAu

ASP.Net请求处理机制初步探索之旅 - Part 5 ASP.Net MVC请求处理流程

好听的歌 我一直觉得看一篇文章再听一首好听的歌,真是种享受.于是,我在这里嵌入一首好听的歌,当然你觉得不想听的话可以点击停止,歌曲 from 王菲 <梦中人>: 开篇:上一篇我们了解了在WebForm模式下一个Page页面的生命周期,它经历了初始化Init.加载Load以及呈现Render三个重要阶段,其中构造了页面控件树,并对页面控件树进行了大量的递归操作,最后将与模板结合生成的HTML返回给了浏览器.那么,在ASP.NET MVC模式下,一个页面的生命周期又经历了哪些步凑呢?别急,本篇漫漫

MVC路由机制(转)

今天我来缕一下MVC的路由机制,因为使用MVC已经快一年了,之前也只是上手,没有系统去理会.项目完了,结合实际使用,回过头来深入一下. MVC 学习索引(点击即可) 一个请求进入IIS后 传统ASP.NET 路由部分 1.IIS根据文件类型将请求转交给相应的处理程序,如果属于ASP.NET文件,则将请求转发给aspnet_isapi.dll.(注:在II6和IIS7上的处理方式是有区别的) 2. HTTP处理模块UrlRoutingModule接收到请求后,循环调用其RouteCollectio

MVC的控制器的激活过程,我们从MvcHandler开始讲,前面的事情以后再讲

一.从MvcHandler开始(不要觉得是代码,让你看懂才是最重要的) using Microsoft.Web.Infrastructure.DynamicValidationHelper; using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Reflection; using System.Threading; using Syst

17+个ASP.NET MVC扩展点,含源码{转}

1.自定义一个HttpModule,并将其中的方法添加到HttpApplication相应的事件中!即:创建一个实现了IHttpmodule接口的类,并将配置WebConfig.在自定义的HttpModule中,可以将一个方法注册到HttpApplication的任意一个事件中,在之后执行HttpApplication一些列事件时,按照事件的顺序(事件又按照添加方法先后的顺序)执行注册在事件中的方法! namespace MvcStore.Models { public class Excute

第16章 过滤器

---------------------------------------------- 注:ActionFilterAttribute类既实现了IActionFilter,也实现IResultFilter接口.是一个抽象类,要求你必须提供一个实现(派生类). 而 AuthorizeAttibute和HandleErrorAttribute,则包含了一些有用的特性,并且可以不必创建派生类进行使用. 注:如果为控制器定义了一个自定义基类,那么运用于基类上的任何过滤器都会影响其派生类. ----

Controller总结

下图显示了组建之间的基本控制流程 1.1控制器工厂.动作调用器 控制器工厂负责创建对请求进行服务的控制器实例 动作调用其负责查找并调用控制器类中的动作方法. 1.2自定义控制器工厂 namespace System.Web.Mvc{ // 摘要:定义控制器工厂所需的方法. public interface IControllerFactory{ // 摘要:使用指定的请求上下文来创建指定的控制器. // 参数:requestContext: // 请求上下文. // controllerName