Le moyen le plus simple est d'obtenir l'application ApplicationInstanceet d'utiliser sa Contextpropriété:
// httpContextBase is of type HttpContextBase
HttpContext context = httpContextBase.ApplicationInstance.Context;
(merci à Ishmael Smyrnow qui l'a noté dans les commentaires)
Réponse originale:
Vous pouvez, en particulier si l' HttpContextBaseinstance qui vous a été remise est de type HttpContextWrapperau moment de l'exécution. L'exemple suivant illustre comment procéder. Cela suppose que vous ayez une méthode appelée Fooqui accepte le contexte comme, HttpContextBasemais qui doit ensuite appeler une méthode dans un assembly tiers (que vous n'aurez peut-être pas la chance de modifier) qui attend que le contexte soit tapé comme 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) { /* ... */ }
HttpContextBasea une méthode appelée GetServiceà la suite de la prise en charge IServiceProvider. Le GetServiceremplacement des HttpContextWrapperdélégués à l' GetServiceimplémentation de l' HttpContextinstance encapsulée . La GetServicemise en œuvre de HttpContextvous permet d'interroger des suspects habituels comme HttpApplication, HttpRequest, HttpResponseet ainsi de suite. Il se trouve qu'il HttpApplicationpossède une propriété appelée Context et qui renvoie une instance de HttpContext. Ainsi , on obtient à l'enveloppées par HttpContextexemple en demandant HttpContextBaseà HttpApplicationtravers GetServicepuis en lisant la Contextpropriété du revenu par HttpApplicationexemple.
Contrairement à HttpContextBase, GetServicen'apparaît pas comme un membre public de, HttpContextmais c'est parce qu'il HttpContextimplémente l' IServiceProvider.GetServiceexplicité alors que ce HttpContextBasen'est pas le cas.
Gardez à l'esprit que ce Foon'est plus testable car il repose sur la capacité de dérouler le sous-jacent HttpContextpendant les tests et qu'il est pratiquement impossible de simuler / stub en premier lieu. Le but de cette réponse, cependant, est de répondre à la question «Comment puis-je obtenir un objet HttpContext à partir de HttpContextBase?», Littéralement . La technique illustrée est utile dans les situations où vous vous retrouvez pris en sandwich entre des composants que vous n'avez pas forcément le luxe de modifier.