这三个 ASP.NET 对象有什么区别:
这些完全一样吗?
编辑 1
这些对象在
global.asax
中的行为是否有所不同?/global.asax.vb
和 default.aspx
/default.aspx.vb
.编辑 2
好的,这次我会尽量具体。我应该使用以下哪项:
' 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
最佳答案
好:
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
应该可以工作,假设到那时上下文已经与线程相关联。
关于.net - HttpContext.Request 和 Request 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5547989/