HttpContext.Request和Request之间的区别

时间:2011-04-05 06:20:52

标签: .net asp.net

三个ASP.NET对象之间有什么区别:

  • HttpContext.Current.Request
  • HttpContext.Request
  • 请求

这些完全相同吗?

编辑1

这些对象在global.asax / global.asax.vbdefault.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

2 个答案:

答案 0 :(得分:27)

嗯:

  • HttpContext.Current static 属性,返回线程的当前HttpContext
  • HttpContext.Request是一个实例属性,返回您在{/ 1}}上调用它的HttpRequest
  • Page.RequestHttpContext中的一个实例属性,返回与您调用它的页面关联的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。