中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決c#百度地圖api APP SN校驗失敗的問題

發布時間:2020-07-13 10:53:23 來源:億速云 閱讀:617 作者:Leah 欄目:編程語言

如何解決c#百度地圖api APP 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 < 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);
        }
    }
}

這里是調用代碼

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#百度地圖api APP SN校驗失敗的問題問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

二手房| 得荣县| 内丘县| 三江| 喜德县| 临高县| 遵化市| 连云港市| 屏东市| 嘉义市| 筠连县| 重庆市| 临泉县| 棋牌| 奉贤区| 习水县| 岢岚县| 东乌| 车险| 扎赉特旗| 湄潭县| 务川| 行唐县| 达拉特旗| 彭州市| 白朗县| 洛川县| 延边| 富蕴县| 望谟县| 仁怀市| 华坪县| 宜宾市| 开远市| 安平县| 沁水县| 朝阳县| 民丰县| 天门市| 崇礼县| 湖南省|