Le moyen le plus simple est d'obtenir l'application ApplicationInstance
et d'utiliser sa Context
propriété:
// httpContextBase is of type HttpContextBase
HttpContext context = httpContextBase.ApplicationInstance.Context;
(merci à Ishmael Smyrnow qui l'a noté dans les commentaires)
Réponse originale:
Vous pouvez, en particulier si l' HttpContextBase
instance qui vous a été remise est de type HttpContextWrapper
au moment de l'exécution. L'exemple suivant illustre comment procéder. Cela suppose que vous ayez une méthode appelée Foo
qui accepte le contexte comme, HttpContextBase
mais qui doit ensuite appeler une méthode dans un assembly tiers (que vous n'aurez peut-être pas la chance de modifier) qui attend que le contexte soit tapé comme 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) { /* ... */ }
HttpContextBase
a une méthode appelée GetService
à la suite de la prise en charge IServiceProvider
. Le GetService
remplacement des HttpContextWrapper
délégués à l' GetService
implémentation de l' HttpContext
instance encapsulée . La GetService
mise en œuvre de HttpContext
vous permet d'interroger des suspects habituels comme HttpApplication
, HttpRequest
, HttpResponse
et ainsi de suite. Il se trouve qu'il HttpApplication
possède une propriété appelée Context et qui renvoie une instance de HttpContext
. Ainsi , on obtient à l'enveloppées par HttpContext
exemple en demandant HttpContextBase
à HttpApplication
travers GetService
puis en lisant la Context
propriété du revenu par HttpApplication
exemple.
Contrairement à HttpContextBase
, GetService
n'apparaît pas comme un membre public de, HttpContext
mais c'est parce qu'il HttpContext
implémente l' IServiceProvider.GetService
explicité alors que ce HttpContextBase
n'est pas le cas.
Gardez à l'esprit que ce Foo
n'est plus testable car il repose sur la capacité de dérouler le sous-jacent HttpContext
pendant les tests et qu'il est pratiquement impossible de simuler / stub en premier lieu. Le but de cette réponse, cependant, est de répondre à la question «Comment puis-je obtenir un objet HttpContext à partir de HttpContextBase?», Littéralement . La technique illustrée est utile dans les situations où vous vous retrouvez pris en sandwich entre des composants que vous n'avez pas forcément le luxe de modifier.