代码之家  ›  专栏  ›  技术社区  ›  J. Minjire

检测重复http请求的最有效方法

  •  4
  • J. Minjire  · 技术社区  · 6 年前

    我使用服务堆栈来接受http请求,将行添加到后端数据库,这是相当标准的东西。我现在遇到的问题是,有时,向服务发送数据的设备会以毫秒为间隔发送相同的请求。这会导致数据库约束错误,因为第一个请求仍在插入新行等

    因此,我认为我需要找到一种方法来检测重复的请求,要么忽略它,要么将HttpError抛出回客户端。我目前的想法是将完整的原始POST数据存储到临时表中,并在处理完成后将其删除。在每个POST请求中,我都会查找其中的数据,忽略是否重复。有没有更简单的方法来检测ServiceStack中的重复http请求?

    1 回复  |  直到 6 年前
        1
  •  10
  •   mythz    6 年前

    防止重复请求的一种常见方法是,客户端随请求发送一个唯一的代码(也称为noonce),如Guid,并让服务器拒绝请求,例如 throw HttpError.Conflict("Duplicate Request") 如果发送了具有相同代码的请求。

    如果你有多个应用服务器,我建议将唯一代码存储在Redis集中,否则,对于单个应用服务器,将其存储在静态 ConcurrentDictionary<string,bool> ConcurrentBag<string> 将起作用。