客户端应用程序创建资源并将其移动到服务器,即一旦客户端从服务器收到HTTP 200,它就会删除本地副本。
简化的控制器操作如下所示:
[HttpPost]
public IHttpActionResult PostResource(MyModel model)
{
// creates Id
await _db.Insert(model);
return Ok(model);
}
有时,当客户端断开连接时(例如在中国,东南亚)资源被持久化到数据库,创建服务器端资源但客户端不知道删除本地副本并再次尝试。正弦HTTP是一种无状态协议,服务器也不知道客户端不再正在侦听。
避免以这种方式创建重复项的好策略是什么?
答案 0 :(得分:1)
您需要在模型上使用某种身份。有几种可能的策略:
答案 1 :(得分:1)
获取资源的哈希值(SHA-256或更高),并将其用作数据库中的唯一键。 Alex Meyer-Gleaves撰写了关于compute any hash for any object in c#
的文章如果哈希已经存在,请不要插入。这使您的POST idempotent。