为什么HttpContext不是从HttpContextBase派生的?

时间:2009-12-29 05:54:17

标签: asp.net-mvc

两者都有Request和Response属性,但我不能编写一个接受HttpContext或HttpContextBase的方法。在某些地方,有一个或另一个可用,所以我需要处理两者。我知道HttpContextWrapper可以向一个方向转换,但仍然......为什么会这样?

2 个答案:

答案 0 :(得分:24)

HttpContext自.NET 1.0以来一直存在。由于向后兼容的原因,他们无法更改该类。 ASP.NET MVC中引入了HttpContextBase以提供更好的可测试性,因为它可以更容易地模拟/存根它。

答案 1 :(得分:-1)

这是一个老问题,但我遇到了同样的问题,答案是在Gunder的评论中。

创建使用HttpContectBase的方法,然后在想要从代码中调用它时将您的上下文包装在HttpContextWrapper中

public class SomeClass{
    ... other stuff in your class
public void MyMethod(HttpContextBase contextbase){
    ...all your other code 
  }
}

用法

var objSomeClass = new SomeClass();
objSomeClass.MyMethod(new HttpContextWrapper(HttpContext.Current));

我认为如果通过ajax进行此调用,HttpContext.Current将为null,我将研究如何获取上下文并更新此帖子。