ASP.NET MVC中HttpContext, HttpContextBase, HttpContextWrapper联系
2023-09-14 09:11:19 时间
ttpContext
HttpContext是最原始的ASP.NET Context. MVC的目的之一是能够单元测试。HttpContext没有base class,并且不是virtual,所以不能用单元测试,因为没有办法mock.
HttpContextBase
HttpContextBase, 是用来在MVC中替代HttpContext.但是这是一个abstract类,是mockable的。
HttpContextWrapper
HttpContextWrapper
是HttpContextBase的实现类,用来真正的替换HttpContext,可以用new
HttpContextWrapper(HttpContext.Current)的方式来创建一个ttpContextWrapper.观察代码可以发
现,HttpContext与HttpContextWrapper在属性方法设置上基本上是一样的,只是HttpContextWrapper不是
virtual,有base
class,因此可以进行单元测试。现在,关于使用到HttpContext的方法,可以通过HttpContextWrapper来进行单元测试。观察
ASP.NET MVC的源码可以发现,在最终MVCHandler(ASP.NET
MVC的HttpHandler)中,调用ProcessRequest(HttpContext
context)方法的时候,其内部把HttpContext转为HttpContextWrapper,然后调用了
ProcessRequest(HttpContext context)来进行后续的处理。
- public ProcessRequest(HttpContext context)
- {
- HttpContextWrapper _context = new HttpContextWrapper(context);
- ProcessRequest(_context);
- }
- public ProcessRequest(HttpContextBase context)
- {
- //进行相应的Controller,Action的调用
- }
相关文章
- 无法下载apk等格式的文件的解决方案---ASP .NET Core 2.0 MVC 发布到IIS上以后无法下载apk等格式的文件的解决方案
- asp.net中使用swfupload上传大文件
- Asp.Net Web API 2第十三课——ASP.NET Web API中的JSON和XML序列化
- 【Asp.Net使用EasyUI】EasyUI combox实现联动
- ASP.NET MVC 分部视图
- ASP.NET MVC
- [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作
- ASP.NET MVC 从IHttp到页面输出
- ASP.NET Core 6框架揭秘实例演示[33]:异常处理高阶用法
- ASP.NET Core 6框架揭秘实例演示[32]:错误页面的N种呈现方式
- ASP.NET Core 6框架揭秘实例演示[11]:诊断跟踪的几种基本编程方式
- ASP.NET Core 6框架揭秘实例演示[03]:Dapr初体验
- 通过极简模拟框架让你了解ASP.NET Core MVC框架的设计与实现[中篇]:请求的响应
- ASP.NET Core的路由[2]:路由系统的核心对象——Router
- 这算是ASP.NET MVC的一个大BUG吗?
- 《ASP.NET MVC 5框架揭秘》样章发布
- ASP.NET MVC下的四种验证编程方式
- ASP.NET MVC - 发布网站
- ASP.NET MVC - 样式和布局
- ASP.NET MVC上传图片前后台内容
- Asp.net中DropDownlist中无法触发后台事件解决方案
- ASP.NET第一次访问慢的解决方法(MVC,Web Api)
- asp.net mvc 传值
- ASP.NET Core使用EF Core操作MySql数据库
- ASP.NET Core 配置 MVC - ASP.NET Core 基础教程 - 简单教程,简单编程
- HttpClient 调用WebAPI时—传参的三种方式(ASP.NET MVC&CORE均适用)
- ASP.NET Core微服务(六)——【.Net Core操作redis】StackExchange.Redis
- ASP.NET Core入门级教程_上篇