url参数+号丢失

问题1:.net url参数  Request.QueryString["signature"]获取到base64加密后的带+号的字符串, +号会被移除

解决方法:通过request.QueryString得到的参数是带有+号,所以直接取

Dictionary<string, string> dict = new Dictionary<string, string>();
foreach (var temp in this.Request.QueryString.ToString().Split('&'))
{
var item = temp.Split('=');
dict.Add(item[0], item[1]);
}

 var signature =dict["signature"];

 

问题2:得到的签名如下S,但是需要验证该签名,通过对比调用java的生成签名接口要么是Adecode  要么是B encode

 S: jmkYG6BhZ+MTybi0xFCfLuAl%2fjpVgwOYusxSOQpQuLI%3d (+号是decode 而/和=是encode)  将S Decode  %2f-->/  %3d--> = 但是+号会被移除

将S Enocde +--> %2B 但是/和=生成的code是小写 %2f和%3d 而需要对比的签名B是大写的 哎

 A: jmkYG6BhZ+MTybi0xFCfLuAl/jpVgwOYusxSOQpQuLI=

 B:jmkYG6BhZ%2BMTybi0xFCfLuAl%2FjpVgwOYusxSOQpQuLI%3D

 

最终解决方案是 将+号手动转成编码,再次decode成符号 就OK了 

 var signature = HttpUtility.UrlDecode(dict["signature"].Replace("+", "%2B"));

//生成timestamp

private static long GetTimeStamp(DateTime dateTime)
{
var baseTime = new DateTime(1970, 1, 1);
return (dateTime.Ticks - baseTime.Ticks) / 10000000 - 8 * 60 * 60;
}

posted @ 2017-03-27 16:19  Amity1006  阅读(736)  评论(0编辑  收藏  举报