私はカスタムのAuthorizeAttributeを作成して、ユーザーが特定のリソースにアクセスできるかどうかをチェックしました。私は簡単にリソースタイプが要求された属性を伝えることができカスタム属性へのルートパラメータの受け渡し
- 要求されたリソースの種類
- 要求されたリソースID
:それは一般的なようにするために、私は、属性に渡された2つの変数が必要要求されたIDを属性に渡す方法はありますか?ここに私のコードは、(?
でマークされた)欠落しているだけで、最後の変数で、次のとおりです。
[System.Web.Http.Authorize]
[System.Web.Http.RoutePrefix("api/accounts")]
public class AccountController : ApiController
{
[AuthorizeIsOwnResource(ResourcesType = ResourcesTypes.Account, ResourceId = ?)]
[System.Web.Http.HttpGet]
[System.Web.Http.Route("test/{id}")]
public ActionResult Test(string id)
{
return new HttpStatusCodeResult(HttpStatusCode.OK);
}
}
任意の提案?私は属性パラメータを一括して取り除くことができ、AuthorizeCore
のHttpContextBase
から要求されたリソースタイプとIDをデシフェートできると思います。それは私の唯一の選択肢ですか?
に
actionContext.ControllerContext.RequestContext.RouteData;
から要求されたIDを取得します。私は最高の解決策は、HttpContextBaseからコントローラ名とアクション名にアクセスすることだと思います。よりクリーンで、実装が簡単で、エラーが発生しにくいです。 –問題について少し熟考した後、私はあなたが絶対に正しいと思います。私はHttpContextBaseからRouteDataを抽出することさえできるかもしれないと思う。私はそれをテストした後、私は解決策を投稿します – MichaelCleverly