常常要接WEB API的人都需要在許多種語言中穿梭,其中最麻煩的就是加密的函式(Function)了,不同語言即使加密演算法都一樣,但在呈現的時候常常都是不一樣的,也會有些微的小地方要修正,但就是這些地方在捆擾著大家,浪費時間在處理顯示問題,所以今天的主題放在C#的MD5()要如何接上PHP的MD5()
一言不合就先上C#的程式碼,這一段程式碼式可以複製貼上後就可以呼叫的,你只要呼叫他就回你PHP格式的MD5字串,通常就在把她回填到WEB API的加密區域就可以用了
using System.Security.Cryptography; public string PHPMD5(string text) { var md5 = new MD5CryptoServiceProvider(); byte[] bytesText = Encoding.UTF8.GetBytes(text.ToLower()); byte[] bytesMD5Text = md5.ComputeHash(bytesText); StringBuilder sb = new StringBuilder(); foreach (var b in bytesMD5Text) { sb.Append(b.ToString("x2").ToLower()); } return sb.ToString(); }
處理完MD5顯示不相容的問題後,我們來處理 http request header 的問題,現在 C# 中比較建議用 httpclient 來替代以前的WebClient,替代後最常見的問題就是要把寫法改成非同步想法 Async,以及 HttpClient 功能相對 WebClient 要來的低接一些,不太熟悉底層的程序員會找不到方法使用,我先來介紹一下,如果你要在 HttpClient 中加入 http request header 的方法,程式碼如下
using (HttpClient client = new HttpClient()) { try { client.DefaultRequestHeaders.Add("account", account); client.DefaultRequestHeaders.Add("sign", sign); client.DefaultRequestHeaders.Add("timestamp", timestamp); client.Timeout = TimeSpan.FromSeconds(30); HttpResponseMessage response = await client.GetAsync(url); string responseBody = await response.Content.ReadAsStringAsync(); Console.WriteLine(responseBody); } catch (HttpRequestException ex) { Console.WriteLine("Message :{0} ", ex.Message); } }
這種寫法比較能夠勾起老人的回憶,比較像是webclient的邏輯,也比較直覺些
近期留言