我有一个标有[Route("api/entities")]
的控制器。有一种获取所有实体的方法:
[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
请求映射到一个方法,将/api/entities?top=N
映射到另一个方法?在Spring的Java中,我会使用params
field of @RequestMapping
。
我不想更改此端点的URL,因为top
参数仅修改正在返回的列表,因此只有一个should use GET parameters。通过使用相同的URL,我也不会更改响应的语义含义(它仍然是相同实体的列表)。使用像Restangular这样的RESTful前端框架非常重要。
答案 0 :(得分:1)
你确定需要同样的行动吗?看起来你想在这里解决不同的任务,所以我建议你创建另一个动作
[Audit(ActionType.EntityTop)]
[HttpGet("top/{top:int}")] //you can specify route via Annotations
public IActionResult GetEntities(int top)
{
// ...
}
与顶级实体的请求将匹配/api/entities/top/5