20

HTTPヘッダー内で送信されるいくつかのOAuthクレデンシャルを検証するカスタムAuthorizeAttributeを作成しました。私はこれらの資格情報のいくつかを使用して、誰がリクエストを行っているかを識別しています。AuthorizeAttributeでこの情報を解析したら、データをコントローラーのインスタンス変数に割り当てることができるように、この情報を渡す方法はありますか?次に、コントローラーのどこにでも、要求側のIDがあります。

4

1 に答える 1

16

元の答え

フィルターでこれを行うことができるはずです

filterContext.HttpContext.Items["test"] = "foo";

そして、これはあなたの行動で

_yourVariable = HttpContext.Items["test"];

おそらく よりも一意のキーを使用したいでしょうが"test"、それがアイデアです。

編集コンストラクターではなくアクションでこれを行う理由は 2 つあります。

  1. Controller のコンストラクターは OnAuthorization の前に起動するため、項目はまだ設定されていません。
  2. HttpContext は、コントローラーのコンストラクターでまだ設定されていません。

代替ソリューション

  1. 新しいを作成しますOAuthController : Controller
  2. オーバーライドOnAuthorization
  3. ロジックをフィルターから次の場所に移動しますOAuthController.OnAuthorization
  4. protectedにフィールド (つまり、protected object myAuthData) を設定します。OAuthController
  5. 他のコントローラに継承さOAuthControllerせる代わりにController
  6. 他のコントローラーは にアクセスできますmyAuthData
于 2011-07-12T18:35:05.993 に答える