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