gpt4 book ai didi

c# - 使用 Web API 执行对象副本时使用的 RESTFull HTTP 方法

转载 作者:行者123 更新时间:2023-11-30 20:35:59 25 4
gpt4 key购买 nike

我有一个 ProductsController,我想创建一个复制产品的操作方法。它只需要一个参数,即一个 Id,这让我想要使用一个简单的 GET 请求。不过,有些东西告诉我 GET 在这里没有意义。我真的使用 POST 并将单个 Id 传递给此方法吗?

这是我想出的:

// COPY: api/products/{id}/copy
[HttpPost("{id}/copy")]
public void Copy(int id)
{
_productManager.Copy(sourceProductId: id);
}

最佳答案

我基本上会使用以下方法之一来处理这种情况:


1。 复制

as per the WebDav specification只需使用 COPY http 方法。我相信,这是以 RESTful 方式克隆/复制资源的语义最正确的方式。请注意,REST 不会限制您仅使用默认动词:

[AcceptVerbs("COPY")]
[Route("{id}")]
public void Copy(int id)
{
_productManager.Copy(sourceProductId: id);
}

2。 POST

继续使用与创建新资源相同的方法(因为毕竟您正在创建新资源),但使用可选的查询字符串参数来确定您是否正在复制现有资源。
然后,您将通过向类似于以下 URI 的 URI 发送一个空主体的 POST 请求来触发复制操作:http://myhost/api/products?sourceId=1。这是一个代码示例:

[HttpPost]
[Route("")]
public void CreateOrCopy([FromBody] ProductDTO dto, [FromUri] int? sourceId = null)
{
if(dto == null && sourceId.HasValue)
_productManager.Copy(sourceProductId: id); // copy behavior
else
// normal behavior
}

我认为从客户端的角度来看,这两种方法都非常有用,不会破坏 REST 约束或语义(绝对避免为此目的使用 GET)。

关于c# - 使用 Web API 执行对象副本时使用的 RESTFull HTTP 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37391655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com