Найпростіший спосіб - отримати додаток ApplicationInstanceта використовувати його Contextвластивість:
// httpContextBase is of type HttpContextBase
HttpContext context = httpContextBase.ApplicationInstance.Context;
(спасибі Ізмаїлу Смирнову, який зазначив це у коментарях)
Оригінальна відповідь:
Ви можете, особливо якщо HttpContextBaseекземпляр, який вам передали, має тип HttpContextWrapperпід час виконання. Наступний приклад ілюструє, як ви можете це зробити. Він передбачає, що у вас є метод, який називається, Fooякий приймає контекст як, HttpContextBaseале потім повинен викликати метод у сторонній збірці (щоб ви не мали щастя змінити), який очікує, що контекст буде введено як 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має метод, названий GetServiceв результаті підтримки IServiceProvider. GetServiceПеревизначення HttpContextWrapperделегатів до GetServiceреалізації обернутого HttpContextпримірника. GetServiceРеалізація HttpContextдозволяє запитувати для звичайних підозрюваних , як HttpApplication, HttpRequest, HttpResponseі так далі. Так буває, що HttpApplicationє властивість під назвою Context і яка повертає екземпляр HttpContext. Так один отримує в оберненої HttpContextінстанції з проханням HttpContextBaseза HttpApplicationдопомогою з GetServiceподальшим читанням Contextвластивості повертається HttpApplicationпримірника.
На відміну від цього HttpContextBase, GetServiceвін не є публічним членом, HttpContextале це тому, що HttpContextреалізує IServiceProvider.GetServiceexplicity, поки HttpContextBaseцього не робить.
Майте на увазі, що Fooце більше не перевіряється, оскільки він покладається на те, що зможете розгортати основу HttpContextпід час тестування, і це, поряд з неможливим підробляти / заглушувати в першу чергу. Суть цієї відповіді, однак, полягає у вирішенні питання "Як отримати об'єкт HttpContext з HttpContextBase?", Буквально . Проілюстрована методика корисна в тих ситуаціях, коли ви опинилися затиснутими між компонентами, не обов'язково повинні змінювати розкіш.