c# - 处理更新详细记录的 RESTful 方式

标签 c# rest asp.net-web-api rpc

如果我需要更新许多详细信息行,我的 Web API Controller 方法可能看起来像这样,使用 RPC 样式:

[Route("api/updateAccountDetailStatus")]
[HttpGet]
public IHttpActionResult UpdateAccountDetailStatus(int accountId, string status)

这会将与该帐户关联的所有详细信息行更改为新状态。

在尝试采用 RESTful 方法时,我的猜测是它会是这样的:

PATCH /accounts/110
{
  "status": "hold"
}

[Route("api/accounts/id")]
[HttpGet]
public IHttpActionResult Account(Account account)

我不喜欢的是现在 API Controller 方法需要询问对象以了解如何处理它。在这种情况下,它会将所有详细信息行更改为该新状态。但是,如果有人调用该补丁并发送不同的属性进行修改怎么办?现在我必须根据那个改变行为?有没有更好的办法?

最佳答案

我看到了这个难题。一方面,您希望保持真实并且在您的 URI 中没有操作名称(更改、更新等),另一方面,这是一个特殊的过程而不是真正的 PATCH。

所以,对于这个article我做了一些工作来允许通过发送的消息类型来定义操作,甚至在 Web API 中创建了一种方法。

此示例代码是 here .

本质上,您将这些公开为 POST 或 PUT(取决于它们是否是幂等的)并且资源将有多个 POST 或 PUT 反对它。例如:

GET /api/InventoryItem [gets all items]
GET /api/InventoryItem/{id} [gets detail of a single item]
POST /api/InventoryItem [creates an item]
POST /api/InventoryItem/{id}* [checks in stock items to the inventory]
POST /api/InventoryItem/{id}* [removes stock items from the inventory]
PUT /api/InventoryItem/{id} [renames an item]
DELETE /api/InventoryItem/{id} [de-activates an item]

这是迄今为止我对这些类型的资源唯一的解决方案。

更新

重要的是,您将在 api/accounts/id 处将其公开为 PUT(因为我认为它是幂等的),发送表示消息类型的有效负载:

PUT api/accounts/id

{"detailBatchStateChange": "hold"}

关于c# - 处理更新详细记录的 RESTful 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50235693/

相关文章:

c# - 如何截断 .NET DateTime 的毫秒数

c# - 将列表转换为 XML

rest - 如何将参数作为 SOAP UI REST 请求中路径的一部分添加到 url?

java - RESTful 服务器中的@Path 正则表达式

asp.net-mvc-4 - 为什么我无法向 IIS 中托管的 API 发出跨源请求?

javascript - 如何将 JSON 发送到 Web API?

c# - 构建 monobjc Native App 时出现 Xbuild/Mono 错误

c# - 嵌套 Lambda 表达式

java - 流关闭异常是 RestTemplate Java。如何将多个对象传递给 Java RestClient

c# - HttpClient .Result 在使用 [WebMethod] 属性时挂起