Cara paling sederhana adalah mendapatkan aplikasi ApplicationInstance,, dan menggunakan Contextpropertinya:
// httpContextBase is of type HttpContextBase
HttpContext context = httpContextBase.ApplicationInstance.Context;
(Terima kasih kepada Ismail Smyrnow yang mencatat ini di komentar)
Jawaban asli:
Anda dapat melakukannya, terutama jika HttpContextBaseinstance yang Anda terima adalah tipe HttpContextWrappersaat run-time. Contoh berikut menggambarkan bagaimana Anda bisa melakukan ini. Itu mengandaikan Anda memiliki metode yang disebut Fooyang menerima konteks sebagai HttpContextBasetetapi kemudian perlu memanggil metode dalam majelis pihak ketiga (bahwa Anda mungkin tidak memiliki nasib baik untuk dimodifikasi) yang mengharapkan konteks yang akan diketikkan 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) { /* ... */ }
HttpContextBasememiliki metode yang disebut GetServicesebagai hasil dari pendukung IServiceProvider. The GetServiceoverride dari HttpContextWrapperdelegasi ke GetServicepelaksanaan dibungkus HttpContextmisalnya. The GetServicepelaksanaan HttpContextmemungkinkan Anda untuk permintaan untuk tersangka seperti HttpApplication, HttpRequest, HttpResponsedan sebagainya. Kebetulan yang HttpApplicationmemiliki properti yang disebut Konteks dan yang mengembalikan contoh HttpContext. Jadi satu mendapat di dibungkus HttpContextmisalnya dengan meminta HttpContextBaseuntuk HttpApplicationmelalui GetServicediikuti dengan membaca Contextmilik kembali HttpApplicationcontoh.
Tidak seperti HttpContextBase, GetServicetidak muncul sebagai anggota publik HttpContexttetapi itu karena HttpContextmengimplementasikan IServiceProvider.GetServicekejelasan sementara HttpContextBasetidak.
Ingatlah bahwa Footidak lagi dapat diuji karena bergantung pada kemampuan untuk membuka bungkus yang mendasarinya HttpContextselama pengujian dan yang hampir tidak mungkin dipalsukan / rintisan. Inti dari jawaban ini, bagaimanapun, adalah untuk menjawab pertanyaan, "Bagaimana saya mendapatkan objek HttpContext dari HttpContextBase?", Secara harfiah . Teknik yang diilustrasikan berguna dalam situasi-situasi di mana Anda menemukan diri Anda terjepit di antara komponen yang tidak perlu Anda modifikasi.