c# - 将文件发布到控制器 - IFormFiles 始终为空
问题描述
我正在尝试发出一个 POST 请求,将文件发送到具有以下定义的控制器方法
public async Task<ActionResult> PostUploadFilesAsync([BindRequired, FromForm] IEnumerable<IFormFile> files)
但“文件”在收到请求时始终为空。
我尝试了几种不同的发布方式,这是我目前构建请求的尝试。我发送的文件已上传到我自己的控制器,此时看起来还不错。
var client = new HttpClient();
var content = new MultipartFormDataContent();
MemoryStream ms = new MemoryStream();
await Request.Form.Files[0].CopyToAsync(ms);
content.Add(new StreamContent(ms));
var address = <the-address>;
var result = client.PostAsync(address, content);
我无法弄清楚为什么没有收到文件。谢谢
解决方案
我发现您发布的代码有两个问题:
调用实例
Add
时MultipartFormDataContent
,您需要同时指定name和filename。name参数必须与正在使用的参数匹配PostUploadFilesAsync
:content.Add(new StreamContent(ms), "files", "file1");
您可以多次执行此操作,以添加多个文件。例如:
content.Add(new StreamContent(ms1), "files", "file1"); content.Add(new StreamContent(ms2), "files", "file2");
将 的内容复制
Request.Form.Files[0]
到MemoryStream
, 后ms
,还必须重置流的位置。否则,发送到服务器的内容将为空,因为它将从流的当前位置开始,即在末尾。这是在添加内容之前重置位置的示例:ms.Position = 0; content.Add(new StreamContent(ms));
推荐阅读
- python - 带有 Django 应用程序错误的静态 CSS 文件
- azure - Azure - 手动删除存储帐户后卸载 IaaSDiagnostics 扩展
- mysql - 在mysql中存储地缘政治数据
- java - 尝试在 AsyncTask 中创建意图的空错误
- matlab - 如何使用 lsqcurvefit 拟合有理函数?
- jquery - Jquery:将值从属性加载到类
- javascript - 在 angular4 的 app.component.ts 文件中使用外部库变量
- ios - XMPPFramework for iOS,didReceiveTrust 实现
- cmake - CMake 的 add_custom_command 有时会删除它的第一个输出吗?
- android - 使用 ndk-build 构建 Android 日历