小编Dav*_*son的帖子

在同一控制器上的 Web Api 中进行多个 POST 调用的最佳实践

我有一个问题要问那些从事 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)

开箱即用,这不起作用,因为默认路由与这两者都匹配。

我知道有几种不同的方法可以解决这个问题,但我想学习“最佳实践”方法。

为了完成同样的行为,你会做什么?

我的想法如下:

  1. 我可以做到这一点,以便帖子的签名只需要一个列表作为参数。我会放弃只需要一个用户的那个。使用该 api 调用的任何代码只需知道将其实体包装在某种类型的集合中。
  2. 我可以创建两个不同的控制器,api/user 和 api/user,每个控制器都有自己的 POST。这种方法并不真正与 REST 兼容,因为 api/user 检索所有用户,而 api/user/1 检索 Id == 1 的用户,那么 api/users 意味着什么?api/users/1 是什么意思?等等...所以可能不是这个选项。
  3. 尝试让它与控制器中的 ActionName 属性相结合的一组自定义约束一起工作,并为每个 POST 编写路由(我不确定这是否会起作用)。
  4. 使其成为 RPC 调用。如果是这种情况,您如何命名 RPC 控制器?当有些是 REST、有些是 RPC 时,您将它们放在解决方案中的什么位置?我应该使用什么标准来确定是否需要 RPC 调用或者是否应该将其保留为 REST?
  5. 完全是别的什么吗?

谢谢你的智慧之言。我真的很感谢任何人/所有人的参与。我真的只是想了解最佳实践是什么。任何可以给出的例子都是超级的!

c# rest rpc asp.net-web-api asp.net-web-api2

5
推荐指数
1
解决办法
4854
查看次数

标签 统计

asp.net-web-api ×1

asp.net-web-api2 ×1

c# ×1

rest ×1

rpc ×1