2011-08-12 10 views
12
[ApiBasicAuthorize] 
public ActionResult SignIn() 
{ 

} 

私はこのカスタムフィルタをApiBasicAuthorizeといいます。コントローラアクションSignInの内部でApiBasicAuthorizeのデータ(プロパティなど)にアクセスすることは可能ですか?コントローラアクションでアクションフィルタのデータにアクセスする

もしそうでない場合は、フィルタからコントローラアクションにデータを渡すにはどうすればよいですか?

+0

。あなたは、ルート辞書にデータを追加することができます、私たちにあなたのコードをいくつか示してください。 –

+0

私はOnAuthorization(AuthorizationContext filterContext)メソッドをオーバーライドしています。 –

答えて

17

HttpContextオブジェクトに添付された項目という辞書があります。このディクショナリを使用して、リクエスト中にコンポーネント間で共有されるアイテムを格納します。そして、どこでも、あなたのコードの後のリクエストで

public override void OnAuthorization(AuthorizationContext filterContext) 
{ 
    filterContext.HttpContext.Items["key"] = "Save it for later"; 

    base.OnAuthorization(filterContext); 
} 

...あなたはauthrize_Attributeでオーバーライドされている方法

var value = HttpContext.Current.Items["key"]; 
+1

Praveenの答えでさえ、私はこれを答えとしてマークしました。なぜなら、HttpContext.ItemsはRouteData.Valuesの代わりにこの目的に適しているからです。 –

+2

@Goths - こんにちは、あなたは 'RouteDataを介して' HttpContext.Items'を選んだ理由を教えてください。 '?また、参照してください:http://stackoverflow.com/a/1809541/538387ありがとう – Tohid

+0

こんにちは@ goths、はい私はまた、前者が後者よりも "適切"である理由も不思議ですか?彼らはどちらも同じ目的を果たしているようですので、どのような制限や意図が両者を分けるのだろうか? – Funka

5
public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     var rd = filterContext.RouteData; 

     //add data to route 
     rd.Values["key"]="Hello"; 

     base.OnAuthorization(filterContext); 
    } 



public ActionResult(string key) 
{ 
//key= Hello 
return View(); 
} 
関連する問題