Reputation: 1164
I'm calling a third-party library that takes a System.Web.HttpResponse
. I see I have a HttpResponseBase
, but not HttpResponse
like in web forms.
Is there a way to get the HttpResponse
? Using MVC 3
.
[Edit] : I'm trying to do this in a controller method. Also corrected casing.
Upvotes: 28
Views: 33962
Reputation: 111
In mvc application you can use HttpContext.ApplicationInstance.Response
.This helped me for getting the HttpResponse
in MVC Application.
Upvotes: 11
Reputation: 42246
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
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"]
.
Upvotes: 5
Reputation: 32818
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.
Upvotes: 43