27

アクション フィルターで一部のユーザー データを取得しており、そのデータの一部をコントローラーのアクションで使用できますが、フィルターからコントローラーにデータを渡す方法が正確にはわかりません。MVC では、おそらくセッションまたは HttpContext.Items を使用しますが、Web API では使用できません。別のオプションは ThreadStatic を使用することですが、より良い解決策が必要だと思いますか?

4

1 に答える 1

63

Request.Properties辞書を使用してそれを行うことができます。

フィルターで:

MyType myObject = //initialize from somwhere
actionContext.Request.Properties.Add("mykey", myObject);

そして、コントローラーでそれを取得できます。

object myObject;
Request.Properties.TryGetValue("mykey", out myObject);
//cast to MyType

このアプローチの利点は、現在のリクエスト インスタンスが Web API パイプラインのどこでも利用できるため、このオブジェクト、つまり Formatter または MessageHandler でもアクセスできることです。

于 2013-02-25T03:05:38.177 に答える