/// <summary>
/// 将URL参数部分进行解密,并且不区分大小写,并动态给对象赋值
/// </summary>
/// <returns></returns>
public static ApplicationNavViewModel BMBSSrcDecrypt(string p, string iv, string webUrl)
{
ApplicationNavViewModel model = new ApplicationNavViewModel();
try
{
string key = System.Configuration.ConfigurationManager.AppSettings["BMBSEncryptKey"];
string paras = RijndaelEncryptor.AES256Decrypt(p, key, iv);
Uri uri = new Uri($"{webUrl}?{paras}");
var paraCollection = uri.ParseQueryString();
var lowerDic = paraCollection.AllKeys.ToDictionary(para => para.ToLowerInvariant(), para => paraCollection[para]);
Type t = model.GetType();
PropertyInfo[] propertyList = t.GetProperties();
foreach (PropertyInfo item in propertyList)
{
if (!item.CanWrite) continue;
if (lowerDic.ContainsKey(item.Name.ToLowerInvariant()))
{
try
{
object value = lowerDic[item.Name.ToLowerInvariant()];
value = Convert.ChangeType(value, item.PropertyType);//动态改变类型
item.SetValue(model, value, null);
}
catch (Exception)
{
throw new Exception("属性" + item.Name + "赋值失败,值为" + lowerDic[item.Name.ToLowerInvariant()]);
}
}
}
}
catch (Exception ex)
{
logger.Error(ex.Message + "p:" + p + "iv:" + iv, ex);
}
return model;
}