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

Joh*_* K. 1 vb.net asp.net servicestack

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

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

myt*_*thz 6

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

如果您有多个应用程序服务器,我建议将唯一代码存储在Redis集中,否则单个应用程序服务器将其存储为静态ConcurrentDictionary<string,bool>ConcurrentBag<string>可以正常工作.