C#使用HttpClient如何判断获取小程序二维码是否出错
发表时间:2020-10-19
发布人:葵宇科技
浏览次数:57
最开始的代码是我从 Senparc.Weixin SDK 的源代码中抄过来的,获取小程序二维码当时的理解是就是从微信那边把二维码下载下来。这样理解也没错,但是有时候下载小程序二维码由于某些原因会出错,这个时候就需要接口区分一下下载小程序是否成功了,那么下载小程序二维码出错的时候我们应该怎么区分呢,那接下来的继续往下看。
我们先来看下最初的代码
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 数组,这里解释一下,读成 byte 数组之后再把 byte 数组转成 base64 输出给前端,这样不用在服务器端保存图片,很方便。
后面仔细阅读微信的接口文档发现它是会告诉你如何区分获取小程序二维码是否成功的
看到这里我就像能不能通过这个 contentType 来区分获取小程序二维码是否成功呢
于是有了现在的代码
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 字符串,所以返回的结果集我用了一个键值对来保存,当然你也可以用元祖,这个看个人喜好,后面再根据返回的结果来判断是否需要处理。
获取小程序二维码出错就把 json 字符串反序列化成对象,然后将微信返回的英文错误信息翻译成中文返回给前端即可。
是不是很简单呢?如果对你有帮助麻烦点个赞,好了今天的文章就到这了,我们下次再见。