c#之解决百度地图api APP SN校验失败问题(代码实例)
导读:收集整理的这篇文章主要介绍了c#之解决百度地图api APP SN校验失败问题(代码实例),觉得挺不错的,现在分享给大家,也给大家做个参考。本篇文章给大家介绍在使用c#调用百度地图api时遇到的SN校验失败问题的解决方法。有一定的参考价值,...
收集整理的这篇文章主要介绍了c#之解决百度地图api APP SN校验失败问题(代码实例),觉得挺不错的,现在分享给大家,也给大家做个参考。本篇文章给大家介绍在使用c#调用百度地图api时遇到的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(IDictionarystring, string> 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, IDictionarystring, string> 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 Dictionarystring, string> (); 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#视频教程!
以上就是c#之解决百度地图api APP SN校验失败问题(代码实例)的详细内容,更多请关注其它相关文章!
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: c#之解决百度地图api APP SN校验失败问题(代码实例)
本文地址: https://pptw.com/jishu/593210.html