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