Heim >Backend-Entwicklung >C#.Net-Tutorial >C# löst das Problem des Baidu Map API APP SN-Überprüfungsfehlers (Codebeispiel)
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] == '%') { 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); } } }
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; }
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-TutorialDas 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!