Come posso ottenere un riferimento a un HttpResponse in ASP.NET MVC?
-
24-10-2019 - |
Domanda
sto chiamando una libreria di terze parti che prende un System.Web.HttpResponse
. Vedo che ho un HttpResponseBase
, ma non HttpResponse
come in moduli web.
C'è un modo per ottenere il HttpResponse
? Utilizzando MVC 3
.
[Edit] : Sto cercando di fare questo in un metodo di controllo. Inoltre corretto alloggiamento.
Soluzione
Se avete bisogno di interagire con i sistemi che tengono i tipi non-mockable, si può ottenere l'accesso alla corrente HttpContext tramite la proprietà statica System.Web.HttpContext.Current . Il HttpResponse è appena appeso fuori di lì tramite la proprietà di risposta.
Altri suggerimenti
In applicazione MVC è possibile utilizzare HttpContext.ApplicationInstance.Response
.This mi ha aiutato per ottenere il HttpResponse
in MVC applicazione.
No, ma il vostro HttpResponseBase
è probabilmente un HttpResponseWrapper
che contiene un HttpResponse
all'interno di esso. Tutti i metodi HttpResponse
sono accessibili dalla HttpResponseBase
.
Se si vuole accedere al HttpResponse
, allora si potrebbe aggiungere un riferimento ad esso in HttpContext.Items
nel vostro IHttpHandler
o da qualche parte in precedenza nel ciclo di vita ASP.NET. L'evento BeginRequest sarebbe un buon punto per fare questo.
I tuoi HttpContext.Items
riferimenti lo stesso dizionario che i riferimenti HttpContextBase.Items
, in modo da avere accesso a tutti gli elementi in MVC3
Per chiarire,
Si tratta di una HttpResponseWrapper
, ma non c'è di accesso pubblico per la HttpResponse
. Quindi, non v'è un riferimento direttamente accessibili. Per fare un riferimento accessibile direttamente davanti al quadro decide di iniziare dandovi l'involucro al posto del riferimento sottostante, creare un gestore di eventi per l'evento HttpApplication.BeginRequest
. Il tuo gestore avrà un riferimento all'oggetto HttpContext
. Set HttpContext.Items["HttpRequest"] = HttpContext.Request
. Poi, nel vostro controller si sarà in grado di accedere al riferimento HttpRequest
da RequestContext.HttpContext.Items["HttpRequest"]
.