2017-05-26 6 views
0

コントローラが[Route("api/entities")]とマークされています。あなたが見ることができるように、注釈を使用して、私はいくつかの監査に要求を保存してのみ許可されたユーザーへのリクエストを承認GETパラメータによるコントローラの一致方法

[Audit(ActionType.EntityList)] // custom annotation for audit 
[Authorize] 
[HttpGet] 
public IActionResult GetEntities() 
{ 
    // ... 
} 

:すべてのエンティティを取得するための方法があります。

今、このエンドポイントを拡張して、上位N個のエンティティを返すようにしたいと考えています。リクエストの例:/api/entities?top=5。私はan optional parameter for the method and use if to detect the caseを使うべきであることを知りました。

ただし、そのような呼び出しを異なるタイプ(例:[Audit(ActionType.EntityTop)])として監査に保存する必要があります。私はそこで承認する必要はありません(誰でもトップエンティティを取得できます)。

/api/entitiesリクエストを1つのメソッドにマップするにはどうすればいいですか?/api/entities?top=Nを別のメソッドにマップするにはどうすればよいですか? JavaのSpringでは、params field of @RequestMappingを使用します。

topパラメータが返されるリストのみを変更するので、このエンドポイントのURLを変更しないようにします。そのためにはshould use GET parametersです。同じURLを持つことで、私はレスポンスのセマンティックな意味も変えません(それは同じエンティティのリストです)。 RestangularのようなRESTfulフロントエンドフレームワークを使用する場合は重要です。

+0

と一致しますパラメータは、異なるActionTypeを使用し、Authorizeを持っていません – musefan

+0

'[HttpGet] public IActionResult GetTop(int top)'のような意味ですか?私はそれを試してみましょう... – fracz

+0

ええ、私はMVCで動作過負荷がどのように動作するのかわかりません。 [多分これは役に立つかもしれません読んで](https://stackoverflow.com/questions/436866/can-you-overload-controller-methods-in-asp-net-mvc) – musefan

答えて

1

あなたは同じ行動が必要ですか?あなたがここに異なるタスクを解決したいように見えますので、私は別のアクションを作成することをお勧めしたいのトップ企業との

[Audit(ActionType.EntityTop)] 
[HttpGet("top/{top:int}")] //you can specify route via Annotations 
public IActionResult GetEntities(int top) 
{ 
    // ... 
} 

リクエストは、あなただけのインクルードが持っている別のアクションを作成していないのはなぜ/api/entities/top/5

+0

私はフロントエンドでRestangularを使用しているので、ここではRESTfulにしようとしています。あなたが提案するURL( '/ api/entities/top/5')にURLを変更するとsemantiacllyは、このエンドポイントがエンティティ" top "に関連付けられた" fives "のリストを返すことを意味します。 – fracz

+0

もう1つのオプションは、メインアクションにオプションのパラメータを配置し、クエリパラメータに基づいてカスタム認可フィルタと監査フィルタを実装して、目的の属性ロジックを実現しようとしています。そうすれば、RESTフィルタリングを保存することができ、urlは '/ api/entities?top = N' – hmnzr

関連する問題