我有一个问题要问那些从事 Web API REST 服务的人。您如何设计您的服务来处理单个实体的 POST,以及能够接收所述实体集合的 POST?
例如:
public IHttpActionResult Post([FromBody]User value)
{
// stuff
}
public IHttpActionResult Post([FromBody]IEnumerable<User> values)
{
// stuff
}
Run Code Online (Sandbox Code Playgroud)
开箱即用,这不起作用,因为默认路由与这两者都匹配。
我知道有几种不同的方法可以解决这个问题,但我想学习“最佳实践”方法。
为了完成同样的行为,你会做什么?
我的想法如下:
- 我可以做到这一点,以便帖子的签名只需要一个列表作为参数。我会放弃只需要一个用户的那个。使用该 api 调用的任何代码只需知道将其实体包装在某种类型的集合中。
- 我可以创建两个不同的控制器,api/user 和 api/user,每个控制器都有自己的 POST。这种方法并不真正与 REST 兼容,因为 api/user 检索所有用户,而 api/user/1 检索 Id == 1 的用户,那么 api/users 意味着什么?api/users/1 是什么意思?等等...所以可能不是这个选项。
- 尝试让它与控制器中的 ActionName 属性相结合的一组自定义约束一起工作,并为每个 POST 编写路由(我不确定这是否会起作用)。
- 使其成为 RPC 调用。如果是这种情况,您如何命名 RPC 控制器?当有些是 REST、有些是 RPC 时,您将它们放在解决方案中的什么位置?我应该使用什么标准来确定是否需要 RPC 调用或者是否应该将其保留为 REST?
- 完全是别的什么吗?
谢谢你的智慧之言。我真的很感谢任何人/所有人的参与。我真的只是想了解最佳实践是什么。任何可以给出的例子都是超级的!