工作上和另一個公司對接,調對方的api需要用到md5加密,加密前要使用HttpUtility.UrlEncode,對方介面一直返回驗證錯誤,定位了問題發現是中文編碼使用HttpUtility.UrlEncode導致的。 C#中HttpUtility.UrlEncode返回的url編碼是小寫的,但對方 ...
工作上和另一個公司對接,調對方的api需要用到md5加密,加密前要使用HttpUtility.UrlEncode,對方介面一直返回驗證錯誤,定位了問題發現是中文編碼使用HttpUtility.UrlEncode導致的。
C#中HttpUtility.UrlEncode返回的url編碼是小寫的,但對方是大寫的,md5之後得到的hash碼就不一致了,所以需要對HttpUtility.UrlEncode方法進行一層封裝,代碼如下:
public static string UrlEncode(string str) { string urlStr = HttpUtility.UrlEncode(str); var urlCode = Regex.Matches(urlStr, "%[a-f0-9]{2}", RegexOptions.Compiled).Cast<Match>().Select(m => m.Value).Distinct(); foreach (string item in urlCode) { urlStr = urlStr.Replace(item, item.ToUpper()); } return urlStr; }
目前的想法是這樣的,有空再來優化一下。