三个ASP.NET对象有什么区别?
> HttpContext.Current.Request
> HttpContext.Request
>请求
这些是完全一样的吗?
编辑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的一个实例属性,返回与您调用它的页面相关联的请求(通常是隐式的)
所以HttpContext.Current.Request将使用前两个属性来获取与当前线程关联的请求.如果您处于请求的线程中,那将与正在呈现的相关页面中的Page.Request相同.
但是,如果您的渲染开始不同的线程,则在另一个线程中运行的代码仍然可以通过Page.Request获取请求(因为它只是一个普通属性),但是没有与线程相关联的HttpContext – 所以HttpContext .Current.Request不行.
编辑:要回答编辑的问题,在global.asax中,Request属性是指HttpApplication.Request
,可能是最好的方法. HttpContext.Request将不起作用,因为它试图访问静态属性,就像它是一个实例属性一样. HttpContext.Current.Request应该工作,假设上下文已经与线程相关联了.