首页 > 解决方案 > ASP.NET Core 2.1 中 [ApiController] 中的 POST 操作

问题描述

我有以下 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 接收文件?这里发生了什么?是路由问题吗?

标签: asp.net-coreasp.net-core-webapiasp.net-core-2.1

解决方案


ApiController属性是在 ASP.NET Core 2.1 中添加的,包括绑定源参数推断。最近有一个对 IEnumerable 的 Infer BindingSource.FormFile 的提交,这可能是相关的。


推荐阅读