web-dev-qa-db-ja.com

チェーンのさらに下流のミドルウェアにデータを渡す

リクエストパイプラインの一部としてミドルウェアを登録する場合、ミドルウェアチェーンを介してデータを渡すにはどうすればよいですか。 (MVCコントローラーアクションで最終的にアクセス可能)

たとえば、リクエストを認証するためのカスタムミドルウェアを実装しましたが、認証データ(認証の結果や追加データなど)をミドルウェアのチェーンに渡すにはどうすればよいですか?最終的にはMVCコントローラーアクションからデータにアクセスしたい、および認証結果に基づいてアクセスを制限するためのカスタムMVCアクションフィルターでも使用できます。

リクエストごとにカスタムデータを保存し、リクエストチェーンの後半でアクセスできる場所はありますか?

16
Warrick

HttpContext.Itemsコレクションを使用して、リクエストの存続期間中のデータを保存できます。その主なユースケースは、コンポーネント(ミドルウェアやコントローラーなど)にデータを渡すことです。アイテムの追加と読み取りは簡単です。

書く:

context.Items["AuthData"] = authData;

読んだ:

var authData = (AuthData)context.Items["AuthData"];

詳細については、 ASP.NET docs を参照してください。

23
Henk Mollema

カスタムデータは IOwinContext オブジェクトに保存できます。 IOwinContextオブジェクトには、ミドルウェアのInvoke関数からアクセスできます。

セットする

context.Set<T>("key", obj);

Get

var obj = context.Get<T>("key");
2
Xudong Jin