c#之解决百度地图api APP SN校验失败问题(代码实例)

本篇文章给大家介绍在使用c#调用百度地图api时遇到的sn校验失败问题的解决方法。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所助。

在使用c#调用百度地图Web服务api遇到的签名(sn校验)问题,在此记录一下,(ip白名单校验的请忽略)

1.首先获取ak与sk,这个两个东西可以从控制台中获取到

2.在这个地址:sn签名算法,里面提供了java,php,c#,python2.7的参考代码

在百度提供的参考代码中,其中c#的代码中MD5加密方法是有问题的,(在笔者写随笔时,代码还是有问题的,之后希望百度官方修复此问题)

c#之解决百度地图api APP SN校验失败问题(代码实例)

把百度的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 = '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#视频教程!

以上就是c#之解决百度地图api APP SN校验失败问题(代码实例)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1432916.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 08:44:40
下一篇 2025年12月17日 08:44:57

相关推荐

发表回复

登录后才能评论
关注微信