日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/4 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 巧用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);

總結

以上是生活随笔為你收集整理的巧用Newtonsoft.Json处理重复请求/并发请求?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。