28

我正在调用一个第三方库,它需要一个System.Web.HttpResponse. 我看到我有一个HttpResponseBase,但HttpResponse不像网络表单中的那样。

有没有办法得到HttpResponse?使用MVC 3.

[编辑]:我正在尝试在控制器方法中执行此操作。还修正了外壳。

4

3 回答 3

43

如果您需要与采用不可模拟类型的系统进行交互,您可以通过静态属性System.Web.HttpContext.Current访问当前的 HttpContext 。HttpResponse 只是通过 Response 属性挂在那里。

于 2011-03-15T17:10:29.167 回答
11

在 mvc 应用程序中,您可以使用HttpContext.ApplicationInstance.Response.This 帮助我获得HttpResponse在 MVC 应用程序中。

于 2013-12-11T09:35:36.967 回答
5

不,但你HttpResponseBase的可能是HttpResponseWrapper其中包含它的HttpResponse内部。所有HttpResponse方法都可以从HttpResponseBase.

如果您想访问,那么您可以在您的或 ASP.NET 生命周期早期的某个地方HttpResponse添加对它的引用。BeginRequest 事件将是执行此操作的好方法。HttpContext.ItemsIHttpHandler

HttpContext.Items引用了相同的字典HttpContextBase.Items,因此您将可以访问 MVC3 中的所有这些项目

澄清,

它是一个HttpResponseWrapper,但没有HttpResponse. 因此,没有可直接访问的参考。要在框架决定开始为您提供包装器而不是底层引用之前创建可直接访问的引用,请为HttpApplication.BeginRequest事件创建一个事件处理程序。您的处理程序将引用该HttpContext对象。设置HttpContext.Items["HttpRequest"] = HttpContext.Request。然后在您的控制器中,您将能够HttpRequest通过RequestContext.HttpContext.Items["HttpRequest"].

于 2011-03-15T15:01:03.903 回答