How can I get a reference to an HttpResponse in ASP.NET MVC?
Solution 1
If you need to interact with systems which take the non-mockable types, you can get access to the current HttpContext via the static property System.Web.HttpContext.Current. The HttpResponse is just hanging off of there via the Response property.
Solution 2
In mvc application you can use HttpContext.ApplicationInstance.Response
.This helped me for getting the HttpResponse
in MVC Application.
Solution 3
No, but your HttpResponseBase
is probably an HttpResponseWrapper
which contains an HttpResponse
inside of it. All the HttpResponse
methods are accessible from the HttpResponseBase
.
If you want access to the HttpResponse
, then you could add a reference to it in HttpContext.Items
in your IHttpHandler
or somewhere earlier in the ASP.NET lifecycle. The BeginRequest event would be a good point to do this.
Your HttpContext.Items
references the same dictionary that HttpContextBase.Items
references, so you will have access to all those items in MVC3
To clarify,
It is an HttpResponseWrapper
, but there is no public accessor for the HttpResponse
. So, there is not a directly accessible reference. To make a directly accessible reference before the framework decides to start giving you the wrapper instead of the underlying reference, create an event handler for HttpApplication.BeginRequest
event. Your handler will have a reference to the HttpContext
object. Set HttpContext.Items["HttpRequest"] = HttpContext.Request
. Then in your controller you will be able to access the HttpRequest
reference by RequestContext.HttpContext.Items["HttpRequest"]
.
Mike Hildner
Updated on January 06, 2020Comments
-
Mike Hildner over 4 years
I'm calling a third-party library that takes a
System.Web.HttpResponse
. I see I have aHttpResponseBase
, but notHttpResponse
like in web forms.Is there a way to get the
HttpResponse
? UsingMVC 3
.[Edit] : I'm trying to do this in a controller method. Also corrected casing.