En basit yol, uygulamayı almak ApplicationInstanceve Contextözelliğini kullanmaktır :
// httpContextBase is of type HttpContextBase
HttpContext context = httpContextBase.ApplicationInstance.Context;
( yorumlarda bunu kaydeden İshmael Smyrnow'a teşekkürler )
Orijinal cevap:
Özellikle HttpContextBaseteslim ettiğiniz örnek HttpContextWrapperçalışma zamanında türdeyse yapabilirsiniz. Aşağıdaki örnekte bunu nasıl yapabileceğiniz gösterilmektedir. FooBağlamı kabul eden, HttpContextBaseancak üçüncü taraf bir derlemede (değiştirmek için iyi şansa sahip olamayacağınız) bir yöntemin çağrılmasını bekleyen bir yöntem çağırmanız gerektiğini varsayar 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) { /* ... */ }
HttpContextBaseGetServicedestekleme olarak adlandırılan bir yöntemi vardır IServiceProvider. GetServiceBir geçersiz kılma HttpContextWrapperdelege GetServicesarılmış uygulanması HttpContextörneği. GetServiceUygulanması HttpContextgibi olağan şüpheliler için sorguya izin verir HttpApplication, HttpRequest, HttpResponsevb. Sadece ContextHttpApplication adında bir özelliğe sahip olan ve bir örneği döndüren bu olur . Yani bir sarılmış de alır sorarak Örneğin için aracılığıyla okuyarak takip döndürülen özelliği örneği.HttpContextHttpContextHttpContextBaseHttpApplicationGetServiceContextHttpApplication
Aksine HttpContextBase, GetServicebir kamu üyesi olarak görünmüyor HttpContextama olmalarındandır HttpContextuygular IServiceProvider.GetServiceexplicity süre HttpContextBasedeğil.
FooArtık test edilemediğini unutmayın, çünkü HttpContexttest sırasında altta yatan şeyi açabilmeye dayanır ve ilk etapta sahte / saplama yapmak imkansızdır. Ancak bu cevabın amacı, “HttpContextBase'den bir HttpContext nesnesini nasıl alabilirim?” Sorusunu tam anlamıyla ele almaktır . Gösterilen teknik, kendinizi değiştirmek için lükse sahip olmadığınız bileşenler arasında kendinizi sandviç bulduğunuz durumlarda kullanışlıdır.