签名设计
一、
1、基础模板,Sign用户签名,TimeStamp暂时没用
[Serializable] public class BaseModel { public string Sign { get; set; } public string TimeStamp { get; set; } public string Code { get; set; } }
2、业务模板
[Serializable] public class CarInfo: BaseModel { public string LicenseNo { get; set; } public string FrameNo { get; set; } public string OwnerName { get; set; } public int Sex { get; set; } public string IdNo { get; set; } }
3、方法暂时没有整理,签名算法是字段键值对,并且排序&分割,最后拼接key,md5加密
[HttpPost] public JsonResult QueryCar(CarInfo car) { var propertys = car.GetType().GetProperties(); SortedDictionary<string, string> dicParams = new SortedDictionary<string, string>(); foreach(var pro in propertys) { if (pro.Name == "Sign" || pro.Name == "Code" ||pro.Name== "TimeStamp") continue; var obj = pro.GetValue(car, null); if (obj == null) continue; dicParams.Add(pro.Name, obj.ToString()); } List<string> pList = new List<string>(); foreach(var dic in dicParams) { pList.Add(dic.Key+"="+dic.Value); } string timeStamp=((int)(DateTime.Now- TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1))).TotalMinutes).ToString(); string pStr = string.Join("&", pList.ToArray());// + "&TimeStamp" + timeStamp; string key = "fdafdahfgfsaaxg"; string md5Str = MD5Helper.ComputeMD5(pStr, key, "utf-8").ToUpper(); bool isChecked = false; if (md5Str == car.Sign) isChecked = true; var r = Json(new {msg= isChecked?"验证成功":"失败" }); return r; }
4、模拟请求
public void Sign() { string url = "http://my.com/Api/MyData/QueryCar"; var data = new { LicenseNo= "冀J566RX", FrameNo= "LBEHDAEB7CY835913", OwnerName= "周后欣", Sex=1, IdNo= "371323198008048124", Sign= "F42FF92A0079BC503D13461F610CF786", Code="10008", TimeStamp= "25470068" }; string dataStr = "FrameNo=LBEHDAEB7CY835913&IdNo=371323198008048124&LicenseNo=冀J566RX&OwnerName=周后欣&Sex=1"; string str =JsonConvert.SerializeObject(data); string r = HttpHelper.Instance.HttpPost(url,str); Console.WriteLine(r); }

浙公网安备 33010602011771号