三个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
答案 0 :(得分:27)
嗯:
HttpContext.Current
是 static 属性,返回线程的当前HttpContext
HttpContext.Request
是一个实例属性,返回您在{/ 1}}上调用它的HttpRequest
Page.Request
是HttpContext
中的一个实例属性,返回与您调用它的页面关联的Page
(通常隐式Request
)因此this
将使用前两个属性,以获取与当前线程关联的请求。如果您在处理请求的线程中,那将与正在呈现的相关页面中的HttpContext.Current.Request
相同。
但是,如果你的渲染启动了一个不同的线程,那么在另一个线程中运行的代码仍然可以通过Page.Request
到达Request
(因为它只是一个正常的但是没有与该帖子相关联的Page.Request
- 所以HttpContext
将无效。
编辑:要回复已编辑的问题,请在global.asax中HttpContext.Current.Request
属性引用HttpApplication.Request
,这可能是最佳使用方法。 Request
将不起作用,因为它试图访问静态属性,就像它是一个实例属性一样。 HttpContext.Request
应工作,假设上下文已与该点相关联。
答案 1 :(得分:1)
他们都是一样的。您可以继承内置的各种快捷方式,例如Controller和Page。