如何解决c#百度地图api APP SN校验失败的问题?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
在千山等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站设计、成都网站制作 网站设计制作按需网站制作,公司网站建设,企业网站建设,品牌网站制作,网络营销推广,成都外贸网站建设,千山网站建设费用合理。
在使用c#调用百度地图Web服务api遇到的签名(sn校验)问题,在此记录一下,(ip白名单校验的请忽略)
1.首先获取ak与sk,这个两个东西可以从控制台中获取到
2.在这个地址:sn签名算法,里面提供了java,php,c#,python2.7的参考代码
在百度提供的参考代码中,其中c#的代码中MD5加密方法是有问题的,(在笔者写随笔时,代码还是有问题的,之后希望百度官方修复此问题)

把百度的MD5方法修改一下,签名就正确了,api正常调用了,开心!!
这里是完整的签名代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
namespace IpService.Code
{
public class BaiduAKSNCaculater
{
private static string MD5(string password)
{
try
{
System.Security.Cryptography.HashAlgorithm hash = System.Security.Cryptography.MD5.Create();
byte[] hash_out = hash.ComputeHash(System.Text.Encoding.UTF8.GetBytes(password));
var md5_str=BitConverter.ToString(hash_out).Replace("-", "");
return md5_str.ToLower();
}
catch
{
throw;
}
}
private static string UrlEncode(string str)
{
str = System.Web.HttpUtility.UrlEncode(str);
byte[] buf = Encoding.ASCII.GetBytes(str);//等同于Encoding.ASCII.GetBytes(str)
for (int i = 0; i < buf.Length; i++)
if (buf[i] == '%')
{
if (buf[i + 1] >= 'a') buf[i + 1] -= 32;
if (buf[i + 2] >= 'a') buf[i + 2] -= 32;
i += 2;
}
return Encoding.ASCII.GetString(buf);//同上,等同于Encoding.ASCII.GetString(buf)
}
private static string HttpBuildQuery(IDictionary querystring_arrays)
{
StringBuilder sb = new StringBuilder();
foreach (var item in querystring_arrays)
{
sb.Append(UrlEncode(item.Key));
sb.Append("=");
sb.Append(UrlEncode(item.Value));
sb.Append("&");
}
sb.Remove(sb.Length - 1, 1);
return sb.ToString();
}
public static string CaculateAKSN(string ak, string sk, string url, IDictionary querystring_arrays)
{
var queryString = HttpBuildQuery(querystring_arrays);
var str = UrlEncode(url + "?" + queryString + sk);
return MD5(str);
}
}
} 这里是调用代码
public static string GetIPAreas()
{
var ip = "你要查询的ip地址";
var ak = "从百度控制台获取到应用AK";
var sk = "从百度控制台获取到签名SK";
var uri = "http://api.map.baidu.com";
var path = "/location/ip";
var param = new Dictionary();
param.Add("ip", ip);
param.Add("ak", ak);
//注意:签名的url参数,并非完整地址
var sn = BaiduAKSNCaculater.CaculateAKSN(ak, sk, path, param);
var url = string.Format("{0}{1}?ip={2}&ak={3}&sn={4}",
uri,
path,
ip,
ak,
sn);
var str = Code.HttpService.Get(url);
return str;
} 关于如何解决c#百度地图api APP SN校验失败的问题问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。