Comment puis-je obtenir une référence à un HttpResponse dans ASP.NET MVC?
-
24-10-2019 - |
Question
J'appelle une bibliothèque tierce qui prend System.Web.HttpResponse
. Je vois que j'ai un HttpResponseBase
, mais pas HttpResponse
comme dans les formulaires Web.
Y at-il un moyen d'obtenir le HttpResponse
? En utilisant MVC 3
.
[Modifier] : Je suis en train de le faire dans une méthode du contrôleur. Aussi enveloppe corrigé.
La solution
Si vous avez besoin d'interagir avec les systèmes qui prennent les types non-mockable, vous pouvez obtenir l'accès au courant HttpContext via la propriété statique System.Web.HttpContext.Current . Le HttpResponse est simplement suspendu à de là via la propriété de réponse.
Autres conseils
En application mvc vous pouvez utiliser HttpContext.ApplicationInstance.Response
.This m'a aidé pour obtenir le HttpResponse
dans MVC application.
Non, mais votre HttpResponseBase
est probablement un HttpResponseWrapper
qui contient une HttpResponse
à l'intérieur de celui-ci. Toutes les méthodes de HttpResponse
sont accessibles depuis la HttpResponseBase
.
Si vous souhaitez accéder à la HttpResponse
, alors vous pouvez ajouter une référence dans HttpContext.Items
dans votre IHttpHandler
ou quelque part plus tôt dans le cycle de vie ASP.NET. L'événement BeginRequest serait un bon point de le faire.
Vos références HttpContext.Items
le même dictionnaire que les références de HttpContextBase.Items
, vous aurez accès à tous ces éléments dans MVC3
Pour clarifier,
Il est un HttpResponseWrapper
, mais il n'y a pas accesseur public pour le HttpResponse
. Donc, il n'y a pas une référence directement accessible. Pour faire une référence directement accessible avant que le cadre décide de commencer à vous donner l'emballage au lieu de la référence sous-jacente, créer un gestionnaire d'événements pour l'événement HttpApplication.BeginRequest
. Votre gestionnaire aura une référence à l'objet HttpContext
. Set HttpContext.Items["HttpRequest"] = HttpContext.Request
. Ensuite, dans votre contrôleur, vous pourrez accéder à la référence HttpRequest
par RequestContext.HttpContext.Items["HttpRequest"]
.