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


本文摘自PHP中文网,作者青灯夜游,侵删。

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

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

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

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

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

把百度的MD5方法修改一下,签名就正确了,api正常调用了,开心!!

这里是完整的签名代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

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<string, 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, IDictionary<string, string> querystring_arrays)

        {

            var queryString = HttpBuildQuery(querystring_arrays);

 

            var str = UrlEncode(url + "?" + queryString + sk);

            

            return MD5(str);

        }

    }

}

这里是调用代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

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<string, 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校验失败问题(代码实例)的详细内容!

相关阅读 >>

C#实现关闭子窗口和关闭父窗口的案例

C#基于正则表达式去掉注释的方法示例

C# 日志记录类创建的源码分享

具体介绍C#使用selenium+phantomjs抓取数据的案例(图文)

C#如何防止sql注入?

关于.net(C#)正确读取中文编码文件的实例教程

C#和.net是一个东西吗?C#与.net的区别与联系

使用C#操作windowad之添加对象到用户组

C#中default什么意思

对比分析C#与java的区别

更多相关阅读请进入《C#》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...