System.Web.HttpResponse
を使用するサードパーティライブラリを呼び出しています。 HttpResponseBase
はありますが、WebフォームのようにHttpResponse
はありません。
HttpResponse
を取得する方法はありますか? MVC 3
を使用します。
[編集]:これをコントローラーメソッドで実行しようとしています。ケーシングも修正。
モック可能でない型を使用するシステムとやり取りする必要がある場合は、静的プロパティSystem.Web.HttpContext.Currentを使用して現在のHttpContextにアクセスできます。 HttpResponseは、Responseプロパティを介してハングアップしているだけです。
MvcアプリケーションではHttpContext.ApplicationInstance.Response
を使用できます。これは、MVCアプリケーションでHttpResponse
を取得するのに役立ちました。
いいえ、でもあなたの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
参照にアクセスできます。