HttpApplication和HttpContext类之间有什么关系?

时间:2016-12-20 06:42:17

标签: c# asp.net

HttpApplication有一个属性Context,其类为HttpContext

HttpContext 类和 HttpApplication 类有一些共同属性,例如用户响应请求。 这两个属性在两个类中有什么区别和关系。 我应该在什么情况下使用另一个以外的那个。

PS:我刚检查了我的应用程序, HttpApplication.User HttpApplication.Context.User 具有相同的值。

3 个答案:

答案 0 :(得分:4)

您的比较似乎是错误的。

因为HttpContext仅处理与当前请求的HTTP协议特定信息相关的事情。

但是HttpApplication包含整个ASP.NET应用程序对象,例如事件,方法,属性等,是的。它具有Context属性,它是System.Web.HttpContext的一种类型。它用于封装针对特定ASP.NET应用程序的每个请求的特定于HTTP的信息。

答案 1 :(得分:1)

您应该了解什么是ASP.NET管道和页面生命周期,然后这两个类的使用将变得明显。

HttpApplication是加载HTTP模块和处理程序的管道实现。传入请求由其实例处理。

HttpContext只是上下文对象,它包含请求和响应消息。这是一种捕获所有请求相关数据的便捷方式,因此通过在HttpApplication内传递这样的对象,模块/处理程序可以很容易地知道发生了什么以及何时应该跳入。

关于它们具有相似属性的原因,您可以参考Microsoft发布的.NET Framework参考源。在大多数情况下,它们应该相互重复,并且只是为了方便而存在。

答案 2 :(得分:0)

HttpContext.User是读写的。 HttpApplication.User是只读的。这是唯一的区别。

如果你反汇编System.Web,你会发现HttpApplication.User的这段代码:

public IPrincipal User
{
    get
    {
        if (this._context == null)
        {
            throw new HttpException(SR.GetString("User_not_available"));
        }
        return this._context.User;
    }
}

除了空检查外,这两个属性完全相同。