A maneira mais simples é obter o aplicativo ApplicationInstancee usar sua Contextpropriedade:
// httpContextBase is of type HttpContextBase
HttpContext context = httpContextBase.ApplicationInstance.Context;
(obrigado a Ishmael Smyrnow, que observou isso nos comentários)
Resposta original:
Você pode, especialmente se a HttpContextBaseinstância que você recebeu é do tipo HttpContextWrapperem tempo de execução. O exemplo a seguir ilustra como você pode fazer isso. Supõe que você tenha um método chamado Fooque aceita o contexto, HttpContextBasemas que precisa chamar um método em um assembly de terceiros (que talvez você não tenha a sorte de modificar) que espera que o contexto seja digitado HttpContext.
void Foo(HttpContextBase context)
{
var app = (HttpApplication) context.GetService(typeof(HttpApplication));
ThirdParty.Bar.Baz(app.Context);
}
// Somewhere in assembly and namespace ThirdParty,
// in a class called Bar, there is Baz expecting HttpContext:
static void Baz(HttpContext context) { /* ... */ }
HttpContextBasetem um método chamado GetServicecomo resultado do suporte IServiceProvider. A GetServicesubstituição de HttpContextWrapperdelegados para a GetServiceimplementação da HttpContextinstância agrupada . A GetServiceimplementação do HttpContextpermite que você consulta para os suspeitos habituais, como HttpApplication, HttpRequest, HttpResponsee assim por diante. Acontece que HttpApplicationtem uma propriedade chamada Context e que retorna uma instância de HttpContext. Assim se obtém na envolto HttpContextexemplo, pedindo HttpContextBasepara HttpApplicationvia GetServiceseguido pela leitura da Contextpropriedade do retornado HttpApplicationinstância.
Ao contrário HttpContextBase, GetServicenão aparece como um membro público de, HttpContextmas isso ocorre porque HttpContextimplementa IServiceProvider.GetServiceexplicitamente enquanto HttpContextBasenão.
Lembre-se de que Foonão é mais testável porque depende de ser capaz de desembrulhar o subjacente HttpContextdurante o teste e que é quase impossível de falsificar / stub em primeiro lugar. O objetivo desta resposta, no entanto, é abordar a pergunta "Como obtenho um objeto HttpContext do HttpContextBase?", Literalmente . A técnica ilustrada é útil nas situações em que você se encontra imprensado entre componentes que não tem necessariamente o luxo de modificar.