[解決済み] ASP.NET MVC 1でHttpContextBaseからHttpContextオブジェクトを取得するにはどうすればよいですか?
質問内容
私はいくつかのWebForms/MVC-agnosticツールで作業しています。
HttpContext
への参照が与えられると
HttpContextBase
オブジェクトを作成します。を使うことはできません。
HttpContext.Current
なぜなら、これは非同期にも動作させる必要があるからです(
HttpContext.Current
を返します。
null
非同期リクエストの間)。私が知っているのは
HttpContextWrapper
が、間違った方向に進んでしまう。
解決方法は?
一番簡単な方法は、アプリケーションを入手することです。
ApplicationInstance
を使用し、その
Context
プロパティを使用します。
// httpContextBase is of type HttpContextBase
HttpContext context = httpContextBase.ApplicationInstance.Context;
<サブ (おかげさまで イシュマエル・スミルナウ コメントでご指摘いただきました)
オリジナルの回答です。
できます、特に
HttpContextBase
のインスタンスが渡されました。
HttpContextWrapper
を実行時に指定します。次の例は、この方法を説明するものです。というメソッドがあるとします。
Foo
で、コンテキストを
HttpContextBase
として型付けされたコンテキストを期待しているサードパーティのアセンブリ (変更する幸運に恵まれないかもしれません) のメソッドを呼び出す必要がある場合です。
HttpContext
.
void Foo(HttpContextBase context)
{
var app = (HttpApplication) context.GetService(typeof(HttpApplication));
ThirdParty.Bar.Baz(app.Context);
}
// Somewhere in assembly and namespace ThirdParty,
// in a class called Bar, there is Baz expecting HttpContext:
static void Baz(HttpContext context) { /* ... */ }
HttpContextBase
というメソッドがあります。
GetService
サポートした結果
IServiceProvider
. その
GetService
のオーバーライドです。
HttpContextWrapper
に委ねる。
GetService
の実装は、ラップされた
HttpContext
インスタンスを作成します。その
GetService
の実装は
HttpContext
のような通常のクエリを使用することができます。
HttpApplication
,
HttpRequest
,
HttpResponse
といった具合です。偶然にも
HttpApplication
というプロパティがあります。
コンテキスト
のインスタンスを返します。
HttpContext
. つまり、ラップされた
HttpContext
のインスタンスを作成します。
HttpContextBase
に対して
HttpApplication
を介して
GetService
の読み込みに続いて
Context
プロパティが返されます。
HttpApplication
インスタンスを作成します。
とは異なり
HttpContextBase
,
GetService
のパブリックメンバとして表示されません。
HttpContext
が、それは
HttpContext
が実装されています。
IServiceProvider.GetService
を明示しながら
HttpContextBase
がない。
を念頭に置いてください。
Foo
をアンラップできることに依存しているので、もはやテスト可能ではありません。
HttpContext
テスト中にフェイクやスタブを作ることは不可能に近いです。しかし、この回答のポイントは、「HttpContextBaseからHttpContextオブジェクトを取得するにはどうすればよいか」という質問に答えることです。
文字通り
. このテクニックは、必ずしも修正する余裕がないコンポーネントに挟まれたような場合に有効です。
関連
-
[解決済み] JsonResultが特殊文字(apostrophe)を \u0027 としてパースしています。
-
[解決済み] ファイルアップロード ASP.NET MVC 3.0
-
[解決済み] ASP.NET MVC Frameworkで複数のサブミットボタンを処理する方法は?
-
[解決済み] ASP.NET MVCでenumからドロップダウンリストを作成するにはどうすればよいですか?
-
[解決済み] ASP.NET MVC - カスタムIIdentityまたはIPrincipalの設定
-
[解決済み] ASP.NET MVCでビューをコンパイルする
-
[解決済み] ELMAHをASP.NET MVCの[HandleError]属性で動作させる方法は?
-
[解決済み] ASP.Net MVCのmodelStateからすべてのエラーを取得する方法は?
-
[解決済み】サービスは常にDTOを返すべきですか、それともドメインモデルも返すことができますか?
-
[解決済み] ASP.NET MVCにおけるロールベースアクセスコントロール(RBAC)とクレームベースアクセスコントロール(CBAC)の比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】@sectionスクリプトとは何か、何のために使うのか?
-
[解決済み] プロジェクトのデフォルトのXMLネームスペースはMSBuild XMLネームスペースである必要があります。
-
[解決済み] DI向けNinjectとUnityの比較【終了しました
-
[解決済み] 修正方法: ハンドラ "PageHandlerFactory-Integrated" のモジュールリストに "ManagedPipelineHandler" という不正なモジュールが含まれています。
-
[解決済み】ASP.NET MVC 3 razor ViewStart ファイルで異なるレイアウトを指定するには?
-
[解決済み】MVCアプリケーションでデータをキャッシュする方法
-
[解決済み] asp.net mvc: なぜ Html.CheckBox は追加の隠された入力を生成するのですか?
-
[解決済み] ASP.NET MVCにおけるセッション変数
-
[解決済み] ソートロジックは、モデル、ビュー、コントローラのいずれに配置するのがよいのでしょうか?[クローズド]
-
[解決済み] エリア間のRedirectToAction?