web-dev-qa-db-ja.com

ASP.NET MVCでHttpResponseへの参照を取得するにはどうすればよいですか?

System.Web.HttpResponseを使用するサードパーティライブラリを呼び出しています。 HttpResponseBaseはありますが、WebフォームのようにHttpResponseはありません。

HttpResponseを取得する方法はありますか? MVC 3を使用します。

[編集]:これをコントローラーメソッドで実行しようとしています。ケーシングも修正。

26
Mike Hildner

モック可能でない型を使用するシステムとやり取りする必要がある場合は、静的プロパティSystem.Web.HttpContext.Currentを使用して現在のHttpContextにアクセスできます。 HttpResponseは、Responseプロパティを介してハングアップしているだけです。

37
Levi

MvcアプリケーションではHttpContext.ApplicationInstance.Responseを使用できます。これは、MVCアプリケーションでHttpResponseを取得するのに役立ちました。

11
akky

いいえ、でもあなたのHttpResponseBaseはおそらくHttpResponseWrapperであり、その中にHttpResponseが含まれています。すべてのHttpResponseメソッドには、HttpResponseBaseからアクセスできます。

HttpResponseへのアクセスが必要な場合は、IHttpHandlerHttpContext.Itemsに、またはASP.NETライフサイクルの初期のどこかに参照を追加できます。これを行うには、BeginRequestイベントが適切です。

HttpContext.ItemsHttpContextBase.Itemsが参照するのと同じ辞書を参照するため、MVC3内のこれらすべてのアイテムにアクセスできます

明確にするために、

これはHttpResponseWrapperですが、HttpResponseのパブリックアクセサーはありません。したがって、直接アクセスできる参照はありません。フレームワークが基になる参照の代わりにラッパーの提供を開始する前に、直接アクセス可能な参照を作成するには、HttpApplication.BeginRequestイベントのイベントハンドラーを作成します。ハンドラーはHttpContextオブジェクトへの参照を持ちます。 HttpContext.Items["HttpRequest"] = HttpContext.Requestを設定します。次に、コントローラーでRequestContext.HttpContext.Items["HttpRequest"]によってHttpRequest参照にアクセスできます。

4
smartcaveman