三个ASP.NET对象之间有什么区别:
这些完全一样吗?
这些对象在global.asax/ global.asax.vb和default.aspx/ 内的行为是否不同default.aspx.vb.
好的,这次我会尝试具体.我应该使用以下哪一项:
' File: global.asax
Protected Sub Application_BeginRequest(ByVal sender As Object, ByVal e As System.EventArgs)
If Request.Url.Port = 80 Then
'If HttpContext.Current.Request.Url.Port = 80 Then
'If HttpContext.Request.Url.Port = 80 Then
'do something
End If
End Sub
' File: default.aspx
Public Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
If Request.Url.Port = 80 Then
'If HttpContext.Current.Request.Url.Port = 80 Then
'If HttpContext.Request.Url.Port = 80 Then
'do something
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 28
好:
HttpContext.Current是一个静态属性,返回HttpContext线程的当前值HttpContext.Request是一个实例属性,返回HttpRequest为HttpContext您调用它Page.Request是一个实例属性Page,返回Request与您调用它的页面关联(通常是隐式this)因此,HttpContext.Current.Request将使用前两个属性以获取与当前线程关联的请求.如果您在处理请求的线程中,那将与Page.Request正在呈现的相关页面内的相同.
但是,如果你的渲染启动了另一个线程,那么在另一个线程中运行的代码仍然可以获取Request通道Page.Request(因为它只是一个普通的属性)但是没有HttpContext与该线程关联 - 所以HttpContext.Current.Request不会起作用.
编辑:要回答编辑过的问题,在global.asax中Request属性引用HttpApplication.Request,并且可能是最好的使用方法.HttpContext.Request将无法工作,因为它试图访问静态属性,就好像它是一个实例属性.HttpContext.Current.Request 应该工作,假设上下文已经与该点相关联.