Najprostszym sposobem jest pobranie aplikacji ApplicationInstancei wykorzystanie jej Contextwłaściwości:
// httpContextBase is of type HttpContextBase
HttpContext context = httpContextBase.ApplicationInstance.Context;
(podziękowania dla Ishmaela Smyrnow, który zauważył to w komentarzach)
Oryginalna odpowiedź:
Możesz, zwłaszcza jeśli przekazana HttpContextBaseinstancja jest typu HttpContextWrapperw czasie wykonywania. Poniższy przykład ilustruje, jak możesz to zrobić. Zakłada się, że masz metodę o nazwie, Fooktóra akceptuje kontekst jako, HttpContextBaseale następnie musi wywołać metodę w zestawie innej firmy (której możesz nie mieć szczęścia do zmodyfikowania), która oczekuje, że kontekst zostanie wpisany jako 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) { /* ... */ }
HttpContextBasema metodę wywołaną GetServicew wyniku wsparcia IServiceProvider. GetServiceOminięcie HttpContextWrapperdelegatów do GetServicerealizacji zawiniętego HttpContextinstancji. GetServiceImplementacja HttpContextpozwala na zapytania dla Podejrzani jak HttpApplication, HttpRequest, HttpResponsei tak dalej. Tak się składa, że HttpApplicationma właściwość o nazwie Context, która zwraca instancję HttpContext. Tak więc można dostać się do opakowanej HttpContextinstancji, prosząc HttpContextBaseo HttpApplicationvia, GetServicea następnie odczytując Contextwłaściwość zwróconej HttpApplicationinstancji.
W przeciwieństwie do HttpContextBase, GetServicenie pojawia się jako publiczny członek, HttpContextale to dlatego, że HttpContextimplementuje IServiceProvider.GetServicejawność, a HttpContextBasenie.
Należy pamiętać, że Foonie jest to już możliwe do przetestowania, ponieważ polega na możliwości rozpakowania elementu bazowego HttpContextpodczas testowania i jest prawie niemożliwe do sfałszowania / zablokowania w pierwszej kolejności. Jednak celem tej odpowiedzi jest dosłownie odpowiedź na pytanie „Jak uzyskać obiekt HttpContext z HttpContextBase?” . Zilustrowana technika jest przydatna w sytuacjach, w których znajdujesz się wciśnięty między komponenty, których modyfikacja niekoniecznie jest luksusowa.