C# löst das Problem des Baidu Map API APP SN-Überprüfungsfehlers (Codebeispiel)

青灯夜游
Freigeben: 2018-10-18 14:34:52
nach vorne
3804 Leute haben es durchsucht

Dieser Artikel stellt Ihnen die Lösung für das Problem der fehlgeschlagenen SN-Überprüfung vor, das bei der Verwendung von C# zum Aufrufen der Baidu Maps API auftritt. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird Ihnen hilfreich sein.

Das Signaturproblem (SN-Überprüfung), das bei der Verwendung von C# zum Aufrufen der Baidu Map Web Service API aufgetreten ist, notieren Sie es hier (Bitte ignorieren Sie die IP-Whitelist-Überprüfung)

1 . Holen Sie sich zuerst ak und sk, diese beiden Dinge können von der Konsole

2 abgerufen werden: sn-Signaturalgorithmus, der Java-, PHP-, C#-, Python2.7-Referenzcode bereitstellt

Im von Baidu bereitgestellten Referenzcode gibt es ein Problem mit der MD5-Verschlüsselungsmethode im C#-Code (Als der Autor den Aufsatz schrieb, gab es immer noch ein Problem mit dem Code. Ich hoffe, Baidu wird dieses Problem später offiziell beheben.)

Ändern Sie die MD5-Methode von Baidu, die Signatur ist korrekt und die API wird normal aufgerufen, glücklich! !

Hier ist der vollständige Signaturcode

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);
        }
    }
}
Nach dem Login kopieren

Hier ist der Aufrufcode

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;
        }
Nach dem Login kopieren

Am Ende geschrieben, hoffe ich, dass die Baidu-Beamten den Code im Beispiel bald ändern werden Möglich, damit andere es verwenden können, um es zusammenzufassen: Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Studium aller hilfreich sein wird. Weitere verwandte Tutorials finden Sie unter

C#-Video-Tutorial

!

Das obige ist der detaillierte Inhalt vonC# löst das Problem des Baidu Map API APP SN-Überprüfungsfehlers (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:cnblogs.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!