28

を受け取るサードパーティのライブラリを呼び出していますSystem.Web.HttpResponse。があるように見えますがHttpResponseBaseHttpResponseWeb フォームとは異なります。

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

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

4

3 に答える 3

43

モックできない型を取るシステムと対話する必要がある場合は、静的プロパティSystem.Web.HttpContext.Currentを介して現在の HttpContext にアクセスできます。HttpResponse は、Response プロパティを介してぶら下がっています。

于 2011-03-15T17:10:29.167 に答える
5

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

へのアクセスが必要な場合は、ASP.NET ライフサイクルの以前の場所またはどこかにHttpResponse参照を追加できます。これを行うには、BeginRequest イベントが適しています。HttpContext.ItemsIHttpHandler

HttpContext.Items参照するのと同じ辞書を参照するため、 MVC3HttpContextBase.Itemsのすべてのアイテムにアクセスできます。

明確にするために、

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

于 2011-03-15T15:01:03.903 に答える