【发布时间】:2017-06-16 16:24:23
【问题描述】:
我有一个 ASP.Net Core Web API,控制器的 POST 方法定义如下:
[HttpPost("SubmitFile")]
public async Task<IActionResult> SubmitFile(IFormFile file)
{
}
我有一个调用 API SubmitFile() 方法的客户端方法,定义如下:
[HttpPost]
public async Task<IActionResult> Index(ICollection<IFormFile> files)
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(_options.SiteSpecificUrl);
foreach (var file in files)
{
if (file.Length <= 0)
continue;
var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
var fileContent = new StreamContent(file.OpenReadStream());
fileContent.Headers.Add("X-FileName", fileName);
fileContent.Headers.Add("X-ContentType", file.ContentType);
var response = await client.PostAsync(_options.WebApiPortionOfUrl, fileContent);
}
}
return View();
}
执行客户端发送时,在服务器端 SubmitFile() 中的断点显示文件参数为空。如何正确发送文件?保留服务器端 API 很重要,因为我让 Swashbuckle/Swagger 正确生成了可以发送文件的 UI。
【问题讨论】:
-
我很确定您不能接受接口作为模型绑定参数。您必须使用具体类。
-
您指的是 SubmitFile(IFormFile 文件)?请解释...
-
不,比如
List<IFormFile>,而不是ICollection。虽然,阅读文档,它可以接受IEnumerable<IFormFile>。见docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads
标签: c# asp.net-core .net-core asp.net-core-webapi