Ответ 1
Ну:
-
HttpContext.Current
- это статическое свойство, возвращающее текущийHttpContext
для потока -
HttpContext.Request
- это свойство экземпляра, возвращающееHttpRequest
дляHttpContext
, которое вы вызываете его -
Page.Request
является свойством экземпляра вPage
, возвращаяRequest
, связанную со страницей, на которую вы его вызываете (обычно неявноthis
)
Итак, HttpContext.Current.Request
будет использовать оба из первых двух свойств, чтобы получить запрос, связанный с текущим потоком. Если вы находитесь в потоке, обрабатывающем запрос, это будет таким же, как Page.Request
на соответствующей странице, которая отображается.
Однако, если ваш рендеринг запускает другой поток, код, запущенный в другом потоке, все равно может попасть в Request
через Page.Request
(потому что это просто нормальное свойство), но не будет HttpContext
связанный с потоком - поэтому HttpContext.Current.Request
не будет работать.
EDIT: для ответа на редактируемый вопрос в global.asax свойство Request
ссылается на HttpApplication.Request
, и, вероятно, это лучший подход к использованию. HttpContext.Request
не будет работать, поскольку он пытается получить доступ к статическому свойству, как если бы он был свойством экземпляра. HttpContext.Current.Request
должен работать, предполагая, что контекст связан с потоком этой точки.