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

时间:2018-06-19 01:23:49

标签: asp.net-core asp.net-core-webapi 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(有关错误的完整详细信息,请参阅here。)

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

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

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

2 个答案:

答案 0 :(得分:3)

在ASP.NET Core 2.1中添加了ApiController Attribute并包含绑定源参数推断。 IEnumerable最近有commit个Infer BindingSource.FormFile可能是相关的。

答案 1 :(得分:3)

您需要设置兼容版本:

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

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