您當前位置>首頁 » 新聞資(zī)訊 » 小程序相關(guān) >
C#使用HttpClient如(rú)何判斷獲取小程序二維碼是否出錯
發表時間:2020-10-19
發布人:葵宇科技
浏覽次數:33
最開始的代碼是我從 Senparc.Weixin SDK 的源代碼中(zhōng)抄過來的,獲取小程序二維碼當時的理解是就是從微信那邊把二維碼下(xià)載下(xià)來。這樣理解也沒錯,但是有時候下(xià)載小程序二維碼由于某些原因會出錯,這個(gè)時候就需要接口區分一下(xià)下(xià)載小程序是否成功了,那麼下(xià)載小程序二維碼出錯的時候我們應該怎麼區分呢(ne),那接下(xià)來的繼續往下(xià)看。
我們先來看下(xià)最初的代碼
public static byte[] Download(string url, string data)
{
HttpClient httpClient = new HttpClient();
HttpContent hc = new StringContent(data);
var ht = httpClient.PostAsync(url, hc);
ht.Wait();
var ft = ht.Result.Content.ReadAsByteArrayAsync();
ft.Wait();
var file = ft.Result;
return file;
}
代碼很簡單就是發送請求到微信那邊,然後把結果讀成 byte 數組,為什麼讀 byte 數組,這裡解釋一下(xià),讀成 byte 數組之後再把 byte 數組轉成 base64 輸出給前端,這樣不用在服務器(qì)端保存圖片,很方便。
後面仔細閱讀微信的接口文(wén)檔發現它是會告訴你(nǐ)如(rú)何區分獲取小程序二維碼是否成功的
看到這裡我就像能不能通(tōng)過這個(gè) contentType 來區分獲取小程序二維碼是否成功呢(ne)
于是有了現在的代碼
public static KmmResult<KeyValuePair<string, string>> Download(string url, string data)
{
var result = new KmmResult<KeyValuePair<string, string>>();
HttpClient httpClient = new HttpClient();
HttpContent hc = new StringContent(data);
var ht = httpClient.PostAsync(url, hc);
ht.Wait();
var content = ht.Result.Content;
if (content.Headers.ContentType.MediaType == "image/jpeg")
{
var byteArr = content.ReadAsByteArrayAsync();
byteArr.Wait();
byte[] codeData = byteArr.Result;
string base64Str = Convert.ToBase64String(codeData);
var pair = new KeyValuePair<string, string>("image", base64Str);
return result.Success(pair);
}
else
{
var resultStr = content.ReadAsStringAsync();
resultStr.Wait();
var pair = new KeyValuePair<string, string>("json", resultStr.Result);
return result.Success(pair);
}
}
先拿到響應頭,然後根據返回的數據類型來判斷獲取小程序二維碼是否成功,成功的話返回的數據類型是圖片出錯的話返回的數據類型是 json 字符串,所以返回的結果集我用了一個(gè)鍵值對來保存,當然你(nǐ)也可(kě)以用元祖,這個(gè)看個(gè)人喜好,後面再根據返回的結果來判斷是否需要處理。
獲取小程序二維碼出錯就把 json 字符串反序列化成對象,然後将微信返回的英文(wén)錯誤信息翻譯成中(zhōng)文(wén)返回給前端即可(kě)。
是不是很簡單呢(ne)?如(rú)果對你(nǐ)有幫助麻煩點個(gè)贊,好了今天的文(wén)章就到這了,我們下(xià)次再見。