zoukankan      html  css  js  c++  java
  • ASP.NET MVC中HttpContext, HttpContextBase, HttpContextWrapper联系

    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)来进行后续的处理。

      1. public ProcessRequest(HttpContext context)  
      2. {  
      3.     HttpContextWrapper _context = new HttpContextWrapper(context);  
      4.     ProcessRequest(_context);  
      5. }  
      6.   
      7.   
      8. public ProcessRequest(HttpContextBase context)  
      9. {  
      10.     //进行相应的Controller,Action的调用  

  • 相关阅读:
    CodeForces gym Nasta Rabbara lct
    bzoj 4025 二分图 lct
    CodeForces 785E Anton and Permutation
    bzoj 3669 魔法森林
    模板汇总——快读 fread
    bzoj2049 Cave 洞穴勘测 lct
    bzoj 2002 弹飞绵羊 lct裸题
    HDU 6394 Tree 分块 || lct
    HDU 6364 Ringland
    nyoj221_Tree_subsequent_traversal
  • 原文地址:https://www.cnblogs.com/BluceLee/p/3679052.html
Copyright © 2011-2022 走看看