POST [ApiController] 中的操作 ASP.NET Core 2.1

POST actions in [ApiController] in ASP.NET Core 2.1

我有以下 ASP.NET Core 2.1 Api 控制器:

[Route("api/[controller]")]
[ApiController]
public class ImagesController : ControllerBase
{
    [HttpPost("[action]")]
    public async Task<IActionResult> Upload([FromForm]ICollection<IFormFile> files)
    { ... }

    [HttpGet("thumbnails")]
    public async Task<IActionResult> GetThumbNails()
    { ... }

GET 和 POST 操作都适用于 Postman。

但是,POST 操作无法与 UI 一起使用:该操作将始终收到 0 的文件参数计数(有关故障的完整详细信息,请参阅 ) .

我最终通过从控制器中删除 [ApiController] 属性来修复故障:

[Route("api/[controller]")]
//[ApiController]
public class ImagesController : ControllerBase
{ ... }

我的问题是为什么 [ApiController] 控制器属性会阻止 POST 方法从 UI 接收文件?这里发生了什么?是路由问题吗?

ApiController Attribute was added in ASP.NET Core 2.1 and includes binding source parameter inference. There is a recent commit 推断 BindingSource.FormFile for IEnumerable 可能是相关的。

您需要设置兼容版本:

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

根据https://docs.microsoft.com/en-us/aspnet/core/web-api/?view=aspnetcore-2.1