【问题标题】:How can I get a reference to an HttpResponse in ASP.NET MVC?如何在 ASP.NET MVC 中获取对 HttpResponse 的引用?
【发布时间】:2011-07-15 20:53:52
【问题描述】:

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

有没有办法获得HttpResponse?使用MVC 3

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

【问题讨论】:

  • 你能说出你在做什么,你特别需要HttpResponse,而不仅仅是HttpResponseBase吗?
  • 如问题中所述,他正在调用第 3 方库

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-2 asp.net-mvc-4


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    在 mvc 应用程序中,您可以使用 HttpContext.ApplicationInstance.Response。这有助于我在 MVC 应用程序中获取 HttpResponse

    【讨论】:

      【解决方案3】:

      不,但您的HttpResponseBase 可能是一个HttpResponseWrapper,其中包含一个HttpResponse。所有HttpResponse 方法都可以从HttpResponseBase 访问。

      如果您想访问HttpResponse,那么您可以在IHttpHandler 中的HttpContext.Items 中或在ASP.NET 生命周期的早期位置添加对它的引用。 BeginRequest 事件将是这样做的一个好点。

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

      澄清一下,

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

      【讨论】:

      • 感谢 smartcaveman。它确实是一个 HttpResponseWrapper。添加了一个编辑以说明我正在尝试在控制器方法中执行此操作。我看不到包装器包含 HttpResponse 的位置。我只是在这里遗漏了什么吗?也不确定您对 IHttpHandler 的建议 - 我只是在方法内部执行此操作。
      猜你喜欢
      • 2011-07-18
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多