巧用Newtonsoft.Json处理重复请求/并发请求?

背景

一些用户请求在某些情况下是可能重复发送的,如果是查询类操作并无大碍,但其中有些涉及写入操作,一旦重复了,可能会导致很严重的后果。例如交易接口如果重复请求,可能会重复下单。

问题

假设我们把请求参数(JSON)按KEY做升序排序,排序后拼成一个字符串,作为 KEY 值呢?但这可能非常的长,所以我们可以考虑对这个字符串求一个 MD5 作为参数的摘要,以这个摘要去取代 reqParam 的位置。

String KEY = "dedup:U="+userId + "M=" + method + "P=" + reqParamMD5;

这样,请求的唯一标识就打上了!

上面的问题其实已经是一个很不错的解决方案了,但是实际投入使用的时候可能发现有些问题:某些请求用户短时间内重复的点击了(例如 1000 毫秒发送了三次请求),但绕过了上面的去重判断(不同的 KEY 值)。

原因是这些请求参数的字段里面,是带时间字段的,这个字段标记用户请求的时间,服务端可以借此丢弃掉一些老的请求(例如5秒前)。

解决方案

这种请求,我们也很可能需要挡住后面的重复请求。所以求业务参数摘要之前,需要剔除这类时间字段。还有类似的字段可能是 GPS 的经纬度字段

代码实现

请求去重工具类的代码

{"Result": {"AccName": "New 2018-05-08 11:22:44","BeginTime": "1970-01-01T00:00:00","EndTime": null,"MaxDrawDownRate": 0.0,"AccountCorporation": "","YearProfitPrecentage": 0.0,"CreateUserName": "MatrixUser","HasDataType": "期货,股票","DataTypes": [{"Value": "8","Text": "期货","Name": null},{"Value": "1","Text": "股票","Name": null}],"SumAmount": 2000000.0,"CapitaleAmount": 2000000.0,"Cash": 0.0},"Head": {"Message": "获取成功","Code": "200","CallTime": "2018-05-24 15:19:04"}
}
//移除某个属性,以不返回该数据
JObject jobject = JObject.Parse(json);           
JObject tokenselect = jobject.SelectToken("Result") as JObject;
tokenselect.Remove("DataTypes");
using Newtonsoft.Json.Linq;public ActionResult Detail(int id)//待处理的josn字符串string json="";//移除某个属性,以不返回该数据JObject jobject = JObject.Parse(json);           JObject tokenselect = jobject.SelectToken("Result") as JObject;tokenselect.Remove("DataTypes");return Json(tokenselect);
}var skuListJson=[{"ProductCategorySysNo":"467011276116070400","MalfunctionsSysNo":"467011100731248640","PropertyValueSysNos":"467011331313111040,467011331510243328,467011332495904768","SysNo":"467011332256829440","Price":2500.00},{"ProductCategorySysNo":"467011276116070400","MalfunctionsSysNo":"467011100731248640","PropertyValueSysNos":"467011331313111040,467011331510243328,467011331845787648","SysNo":"467011331208253440","Price":2000.00},{"ProductCategorySysNo":"467011276116070400","MalfunctionsSysNo":"467011095232516096","PropertyValueSysNos":"467011326095396864,467011326493855744,467011330340032512","SysNo":"467011330189037568","Price":0.00}]; Newtonsoft.Json.Linq移除對象中不需要的屬性或字段
JArray對應的是集合,JObject對應一條記錄
//list是一個C#List<T>對象泛型集合
JArray jArray = JArray.FromObject(list);
//方式二:這樣也行
//JArray jArray =JArray.Parse(skuListJson);
foreach (JObject item in jArray)
{              //移除屬性SysNo、ProductCategorySysNoitem.Remove("SysNo");item.Remove("ProductCategorySysNo");
}         
//最後在將jArray序列化為json字符串
string skuListJson = JsonConvert.SerializeObject(jArray);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301831.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java鼠标改变窗口大小监听事件_java – 当用户拖动鼠标时,监听JFrame调整事件大小?...

当用户单击JFrame的角落来调整大小并拖动鼠标时&#xff0c;JFrame会根据用户拖动时鼠标的当前位置重绘。你怎么听这些事件&#xff1f;下面是我目前尝试的&#xff1a;public final class TestFrame extends JFrame {public TestFrame() {this.addComponentListener(new Compo…

phpmyadmin 安装 配置

自己的试验成功后&#xff0c;写下&#xff01; 1.先到网上下载phpmyadmin&#xff0c;再解压到可以访问的web目录下&#xff08;如果是虚拟空间&#xff0c;可以解压后通过ftp等上传到web目录下&#xff09;&#xff0c;当然您可以修改解压后该文件的名称。 2.配置config文件 …

春节特惠活动┃数学无用论??我们欠孩子真正的数学阅读

▲数据汪特别推荐点击上图进入玩酷屋说到数学&#xff0c;我想起了13年一场轰动行业各界的“数学无用论”&#xff01;那时微博上有个话题叫做#让数学滚出高考#&#xff0c;超过7成网友都表示支持&#xff0c;这可怕的比例就能说明在中国由于数学差导致命运被洗牌的真不在少数……

EF Core中高效批量删除、更新数据的Zack.EFCore.Batch发布三个新特性

Zack.EFCore.Batch是一个支持在Entity Framework Core中高效删除和更新数据的开源库。我们知道&#xff0c;EF Core中不支持高效的删除和更新数据&#xff0c;所有的更新和操作都是逐条数据处理。比如&#xff0c;如果使用如下的语句删除实现“删除所有价格大于10元的书“&…

2012年,总结

2012年&#xff0c;神奇又平凡的一年。玛雅人的世界末日被普通的一天击破&#xff0c;自此买蜡烛的人就可以每天点着蜡烛做饭和炒菜了&#xff0c;用的还是当初囤积的食盐。 2012年&#xff0c;我就这样平淡的毕业了。就这样上班了&#xff0c;一切还没准备妥当&#xff0c;直到…

python pytest allure_python测试框架pytest和测试报告allure的联合使用-----测试套件

最近采用jenkinspythonpytestallure写了一些自动化测试用例。碰到这样一种场景&#xff1a;如果我创建了2个测试任务&#xff0c;测试任务1包含2个测试用例test_a.py和test_b.py&#xff0c;测试任务2包含一个测试用例test_c.py。一. 常规操作假设我的代码目录结构有如下3个测试…

那天,我无意间瞟了眼程序员的桌面……

全世界只有3.14 % 的人关注了数据与算法之美爱因斯坦曾说过“要是乱糟糟的桌面意味着杂乱无章的脑袋&#xff0c;那空白桌面意味着什么呢&#xff1f;似乎很多在某些领域拥有天赋的人都不喜欢干净整洁的桌面&#xff0c;包括乔布斯和扎克伯格也是&#xff0c;甚至有的人一看到整…

.Net Core with 微服务 - Ocelot 网关

上一次我们通过一张架构图&#xff08;.Net Core with 微服务 - 架构图&#xff09;来讲述了微服务的结构&#xff0c;分层等内容。从现在开始我们开始慢慢搭建一个最简单的微服务架构。这次我们先用几个简单的 web api 项目以及 ocelot 网关项目来演示下网关是如何配置&#x…

GNU ARM 汇编指令[转载]

http://blog.sina.com.cn/s/blog_59b189220100au1k.html 第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C编写程序很方便&#xff0c;但汇编源程序用于系统最基本的初始化&#xff0c;如初始化堆栈指针、设置页表、操作 ARM的协处理器等。初始化完成后就可以跳转到C代码执行…

android java 8_四个库,让你在 Android 中启用 Java 8 功能

Java 8 的推出引入很多革命性变化&#xff0c;加入了函数式编程的特征&#xff0c;使基于行为的编程成为可能&#xff0c;同时简化了各种设计模式的实现方式&#xff0c;是 Java 有史以来最重要的更新。自 Android N 之后&#xff0c;由于 Jack&Jill 编译工具链的存在&…

NET问答: 如何将十六进制的 #FFDFD991 转成 C# 中的 Color 类?

咨询区 viky&#xff1a;请问如何将一个16进制的 color code 转成 C# 中的 Color &#xff1f;我的业务场景中需要从文件读取一个 hex color code&#xff0c;然后我需要将该 code 转成 System.Windows.Media.Color 实例&#xff0c;不知道 .NET Framework 中是否有相关的支持类…

60 Minutes专访李开复:泛人工智能可能永远实现不了

全世界只有3.14 % 的人关注了数据与算法之美尽管你听说过人工智能&#xff0c;但机器仍然无法像人类一样思考&#xff0c;但在过去的几年里&#xff0c;它们已经具备了学习的能力。突然之间&#xff0c;我们的设备睁开了眼睛和竖起了耳朵&#xff0c;汽车开始无人行驶。今天&am…

API之子窗口创建 (转)

子窗口的创建非常非常重要 步骤&#xff1a;1、新建窗口类&#xff0c;在窗口类中指名对应的自定义的窗口过程。窗口类类名要唯一&#xff0c;它 是各窗口类相互区别的标识。注意&#xff0c;类名或为静态变量&#xff0c;或为全局变量&#xff0c;因为程 序随时都用他们。…

java 支付宝 退款_Java 支付宝支付,退款,单笔转账到支付宝账户(支付宝支付)

最近一直在接触第三方,刚接入完支付宝的API做一下总结,个人能力薄弱有不对的地方望指教. 做的是一个小型电商项目,所以会接入第三方的支付和登入功能, 第一次接入第三方撸了很多官方文档.然后创建应用选择需要接入的功能,有些应用是需要签约的签约就好了审核蛮快的.以上应用申…

DB排行榜更新,.NET Core+MySQL成主流!

上图是DB-Engines数据库流行度最新排行榜&#xff0c;Oracle、MySQL、SQLServer虽几经下滑&#xff0c;然而还是遥遥领先的前三名。后起之秀PostgreSQL和MongoDB持续增长&#xff0c;然而在体量上还相差甚远&#xff0c;可以预见这些年&#xff0c;三大关系型数据库的主流地位是…

史上最惨锦鲤即将来袭!奖品堪比5年高考3年模拟!

全世界只有3.14 % 的人关注了数据与算法之美在锦鲤盛行的2018年我们超级数学建模也跟风来了一个“史上最惨锦鲤”活动为什么叫史上最惨锦鲤呢因为平常看一本数学书就已经头疼了何况我们奖品还是100本数学书试问除了学霸还有谁能承受这种殊荣巧的是最后的得主还真是一个学霸那就…

iOS开发  plist字段列表,很全

http://www.dreamingwish.com/dream-category/learning-note/iphone-learning-note http://www.dreamingwish.com/dream-2012/plist-field-list-it-is.html bundle字段 这些字段名都是XML中的名称&#xff0c;在xcode的属性编辑器中&#xff0c;名字并不相同 bundle目录中的属性…

java对象 序列化_Java基础之对象序列化

1. 什么是Java对象序列化Java平台允许我们在内存中创建可复用的Java对象&#xff0c;但一般情况下&#xff0c;只有当JVM处于运行时&#xff0c;这些对象才可能存在&#xff0c;即&#xff0c;这些对象的生命周期不会比JVM的生命周期更长。但在现实应用中&#xff0c;就可能要求…

NET问答: 到底是返回 null 好,还是 空集合 好?

咨询区 Omu&#xff1a;我是一个 C# 菜鸟&#xff0c;说实话&#xff0c;这个问题是一个非常困惑于我们这样初学者的一个问题&#xff0c;我想知道实际开发中的 最佳实践 应该是什么样的&#xff1f;回答区 user1228&#xff1a;如果要我选的话&#xff0c;我会用 空集合&#…

人工智能读心术

全世界只有3.14 % 的人关注了数据与算法之美对于许多无法发出声音的人来说&#xff0c;他们想说的话会通过某种信号隐藏在大脑中。人类无法直接破译这些信号。但是&#xff0c;最近有三个研究小组在“破译”这种大脑语言密码上取得了一定进展。Science杂志最新报道了哥伦比亚大…