使用HttpClient上传企业微信临时素材到ASP.NET Core 3.1 WebAPI
需积分: 49 191 浏览量
更新于2024-08-30
收藏 2KB TXT 举报
.NET Core 3.1 WebAPI 使用 HttpClient 上传企业微信临时素材
.NET Core 3.1 WebAPI 应用程序可以使用 HttpClient 库来上传企业微信临时素材。在本文中,我们将详细介绍如何使用 HttpClient 库上传企业微信临时素材,并返回 media_id。
首先,我们需要获取企业微信的 access token,这可以通过调用企业微信提供的 API 接口来实现。在本示例中,我们使用 `GetQYAccessToken()` 方法来获取 access token。
```csharp
var tokenResult = GetQYAccessToken().Result;
dynamic resultObj = JsonConvert.DeserializeObject(tokenResult);
```
接下来,我们需要构建上传请求的 URL,包括 access token 和文件类型。
```csharp
var url = string.Format("https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token={0}&type={1}", resultObj.access_token, file.Name);
```
在上传文件之前,我们需要将文件流读取到 byte 数组中。
```csharp
var stream = file.OpenReadStream();
byte[] data = new byte[stream.Length];
stream.Read(data, 0, data.Length);
stream.Close();
```
然后,我们需要构建.multipart/form-data 类型的请求内容。首先,我们需要生成一个随机的分隔线。
```csharp
var boundary = DateTime.Now.Ticks.ToString("X");
```
接下来,我们需要构建 MultipartFormDataContent 对象,并将文件内容添加到其中。
```csharp
var content = new MultipartFormDataContent(boundary);
content.Headers.Remove("Content-Type");
content.Headers.TryAddWithoutValidation("Content-Type", "multipart/form-data;boundary=" + boundary);
HttpContent byteContent = new ByteArrayContent(data);
content.Add(byteContent);
byteContent.Headers.Remove("Content-Disposition");
byteContent.Headers.TryAddWithoutValidation("Content-Disposition", $"form-data;name=\"media\";filename=\"{file.Name}\"");
```
最后,我们可以使用 HttpClient 库将请求发送到企业微信服务器。
```csharp
var client = new HttpClient();
var response = await client.PostAsync(url, content);
```
在上传完成后,我们可以从响应结果中获取 media_id。
```csharp
var responseContent = await response.Content.ReadAsStringAsync();
dynamic responseObj = JsonConvert.DeserializeObject(responseContent);
var mediaId = responseObj.media_id;
```
使用 HttpClient 库上传企业微信临时素材可以分为以下几个步骤:获取 access token、构建上传请求 URL、读取文件流、构建 multipart/form-data 类型的请求内容、发送请求、获取 media_id。
2018-03-20 上传
2021-03-26 上传
2022-07-13 上传
2020-10-14 上传
2021-03-27 上传
2023-07-17 上传
weixin_39725436
- 粉丝: 0
- 资源: 2
最新资源
- 火炬连体网络在MNIST的2D嵌入实现示例
- Angular插件增强Application Insights JavaScript SDK功能
- 实时三维重建:InfiniTAM的ros驱动应用
- Spring与Mybatis整合的配置与实践
- Vozy前端技术测试深入体验与模板参考
- React应用实现语音转文字功能介绍
- PHPMailer-6.6.4: PHP邮件收发类库的详细介绍
- Felineboard:为猫主人设计的交互式仪表板
- PGRFileManager:功能强大的开源Ajax文件管理器
- Pytest-Html定制测试报告与源代码封装教程
- Angular开发与部署指南:从创建到测试
- BASIC-BINARY-IPC系统:进程间通信的非阻塞接口
- LTK3D: Common Lisp中的基础3D图形实现
- Timer-Counter-Lister:官方源代码及更新发布
- Galaxia REST API:面向地球问题的解决方案
- Node.js模块:随机动物实例教程与源码解析