> 백엔드 개발 > C#.Net 튜토리얼 > C#은 Baidu Map API APP SN 확인 실패 문제를 해결합니다(코드 예).

C#은 Baidu Map API APP SN 확인 실패 문제를 해결합니다(코드 예).

青灯夜游
풀어 주다: 2018-10-18 14:34:52
앞으로
3998명이 탐색했습니다.

이 글에서는 C#을 사용하여 Baidu Maps API를 호출할 때 발생하는 SN 인증 실패 문제에 대한 해결 방법을 소개합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

C#을 사용하여 Baidu Map Web Service API를 호출할 때 발생하는 서명(sn 확인) 문제를 여기에 기록하세요. (IP 화이트리스트 확인을 무시하세요)

1 먼저 ak와 sk를 얻으세요. 콘솔에서 획득

2. 이 주소에는 java, php, c#, python2.7에 대한 참조 코드를 제공하는 sn 서명 알고리즘

Baidu에서 제공하는 참조 코드에는 C#에 대한 코드가 제공됩니다. MD5 암호화 방식 문제 (저자가 에세이를 작성할 당시에도 코드에 문제가 있었습니다. 나중에 Baidu에서 이 문제를 정식으로 수정했으면 좋겠습니다.)

Baidu의 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] == &#39;%&#39;)

                {

                    if (buf[i + 1] >= &#39;a&#39;) buf[i + 1] -= 32;

                    if (buf[i + 2] >= &#39;a&#39;) 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#은 Baidu Map API APP SN 확인 실패 문제를 해결합니다(코드 예).의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿