【问题标题】:Why does HttpContext not derive from HttpContextBase?为什么 HttpContext 不是从 HttpContextBase 派生的?
【发布时间】:2009-12-29 05:54:16
【问题描述】:

两者都具有 Request 和 Response 属性,但我无法编写采用 HttpContext 或 HttpContextBase 的方法。在某些地方,一个或另一个都可用,所以我需要同时处理这两个。我知道HttpContextWrapper可以单向转换,但是还是……为什么会这样?

【问题讨论】:

  • 我来这里是为了弄清楚如何将HttpContextBase 转换为HttpContext。你的问题包含了答案。答案是HttpContextWrapper,它派生自HttpContextBase,并将HttpContext 作为构造函数的参数。因此,顾名思义,它包装了一个HttpContext 并使其作为HttpContextBase 兼容对象可用。谢谢!

标签: asp.net-mvc


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这是一个老问题,但我也遇到了同样的问题,答案在 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, 我将研究如何获取上下文并更新此帖子。

    【讨论】:

    • 我认为即使使用 Ajax 调用,您仍然应该有一个 HttpContext
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 2012-10-04
    • 2010-12-31
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多