Am einfachsten ist es, die Anwendung ApplicationInstanceabzurufen und ihre ContextEigenschaft zu verwenden:
// httpContextBase is of type HttpContextBase
HttpContext context = httpContextBase.ApplicationInstance.Context;
(Danke an Ishmael Smyrnow, der dies in den Kommentaren vermerkt hat)
Ursprüngliche Antwort:
Dies ist insbesondere dann möglich, wenn die übergebene HttpContextBaseInstanz HttpContextWrapperzur Laufzeit vom Typ ist . Das folgende Beispiel zeigt, wie Sie dies tun können. Angenommen, Sie haben eine Methode namens Foo, die den Kontext als akzeptiert HttpContextBase, dann aber eine Methode in einer Assembly eines Drittanbieters aufrufen muss (die Sie möglicherweise nicht ändern können), die erwartet, dass der Kontext als eingegeben wird 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) { /* ... */ }
HttpContextBasehat eine Methode GetServiceals Ergebnis der Unterstützung aufgerufen IServiceProvider. Das GetServiceÜberschreiben von HttpContextWrapperDelegaten zur GetServiceImplementierung der umschlossenen HttpContextInstanz. Die GetServiceImplementierung HttpContextermöglicht es Ihnen , zu Abfrage für üblich Verdächtigen wie HttpApplication, HttpRequest, HttpResponseund so weiter. Es ist einfach so, dass HttpApplicationes eine Eigenschaft namens Context hat, die eine Instanz von zurückgibt HttpContext. Man gelangt also zur umschlossenen HttpContextInstanz, indem man HttpContextBasenach HttpApplicationvia fragt und GetServiceanschließend die ContextEigenschaft der zurückgegebenen HttpApplicationInstanz liest .
Im Gegensatz zu HttpContextBase, GetServiceerscheint nicht als ein öffentliches Mitglied , HttpContextaber das ist , weil HttpContextGeräte IServiceProvider.GetServiceexplicity während HttpContextBasenicht.
Denken Sie daran, dass dies Foonicht mehr testbar ist, da es darauf ankommt, dass der Basiswert HttpContextwährend des Tests ausgepackt werden kann und dass es nahezu unmöglich ist, ihn zu fälschen / zu stummeln . Der Sinn dieser Antwort besteht jedoch darin, die Frage „Wie erhalte ich ein HttpContext-Objekt von HttpContextBase?“ Wörtlich zu beantworten . Die dargestellte Technik ist in Situationen nützlich, in denen Sie sich zwischen Komponenten befinden, für deren Modifizierung Sie nicht unbedingt den Luxus haben.