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;
}