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
我有以下 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