问题来源于今天的帖子,这位同学使用C#请求接口出现41005,(内心独白:他有点内向,不好意思问同事)
但是从来没写过C#,一头雾水,点了一杯茶百道,🤔ing
step1:安装环境
这里选择.NET 8.0,下载地址:https://dotnet.microsoft.com/zh-cn/download/dotnet/8.0
开始安装。。。过了几秒后安装完毕,打开控制台输入命令 dotnet,验证是否成功
step2: 打开VS Code
创建一个文件夹,打开它,控制台执行dotnet new console创建测试demo
step3: 各种网站搜索C#学习语法,http请求方法,表单上传文件,花费很多时间
找了一段代码,然后去测试号上生成access_token,又找个图片,开始测试,竟然翻车了,报错41005
这个问题会出现在哪呢?不慌,查下rid看看请求体,接口调用方式如下:
POST https://api.weixin.qq.com/cgi-bin/openapi/rid/get?access_token=ACCESS_TOKEN
获取到了下面的结果,看起来也没什么错误,现在开始挠头。。。
"request_body":"--1b41388d-75c3-4752-b274-f6d25c2c8cbf\r\nContent-Disposition: form-data; name=media; filename=test.jpg; filename*=utf-8''test.jpg\r\n\r\n����"step4: 控制台输入dotnet run 运行查看结果,成功了std
step4: 找个能获取成功的代码打印请求头
细节省略。
此时茶百道见底,找到了猫腻,成功和不成功的,filename不一样,少个双引号,赶紧加上试试,果然成功了
运行结果截图:
示例代码:
using System;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
string filePath = "D:\\test.jpg";
string uploadUrl = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=xxxx&type=image";
using (var httpClient = new HttpClient())
{
using (var content = new MultipartFormDataContent())
{
content.Headers.ContentType = new MediaTypeHeaderValue("multipart/form-data");
var fileContent = new ByteArrayContent(System.IO.File.ReadAllBytes(filePath));
// 关键代码 "\""
content.Add(fileContent, "media", "\"" + Path.GetFileName(filePath) + "\"");
var response = await httpClient.PostAsync(uploadUrl, content);
var resultStr = await response.Content.ReadAsStringAsync();
Console.WriteLine(resultStr);
}
}
}
}
最后:希望这位同学能多学学,不要急着到点下班,不会排查问题可以虚心请教下同事。
听会music 告五人《从未见过的海》,我的JBL!我的充电宝!
C#好啊,C#得学~
茶百道是几分糖的