Разница между HttpContext.Request и Запросом - PullRequest
14 голосов
/ 05 апреля 2011

В чем разница между тремя объектами 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

Ответы [ 2 ]

28 голосов
/ 05 апреля 2011

Скважина:

  • HttpContext.Current - это свойство static , возвращающее текущий HttpContext для потока
  • HttpContext.Request - это свойство instance , возвращающее 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 должен работать, предполагая, что контекст связан с потоком этой точкой.

1 голос
/ 05 апреля 2011

Они все одинаковые.Есть просто различные сочетания клавиш, встроенные в классы, которые вы наследуете, такие как Controller и Page.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...