当包含 IFormFile 属性的复杂类型的 FromForm 模型绑定列表时,不执行操作方法



我现在正在做一个使用AspNetCore 2.2的项目来构建一个纯RESTful应用程序。 现在,我在实现multipart/form-data上传API时遇到了一个奇怪的错误。

我尝试使用我的域对象作为 POST API 上的模型。 这是我的控制器。

[ApiController]
[Route("api/v{v:apiVersion}/[controller]")]
[ApiVersion("1")]
public class PhotoController : ControllerBase
{
[HttpPost]
public string Upload([FromForm]TestMultipartModel model)
{
return "success";
}
}

。我的模型看起来像这样。

public class TestMultipartModel
{
[Required]
public int? Num { get; set; }
public IFormFile File { get; set; }
public string Str { get; set; }
public List<TestMultipartSubModel> Details { get; set; }
}
public class TestMultipartSubModel
{
public string Name { get; set; }
// public IFormFile File { get; set; }
}

我使用邮递员来测试我的 API,如下所示。 (我很想发布邮递员的截图,但我的声誉太低,无法做到这一点:(

num: "1"
str: "some string..."
file: "random.png"
details[0].name: "my_name"
details[0].file: "another_random.png"
details[1].name: "second_name"
details[1].file: "second_random.png"

一切正常,就好像子模型不包含IFormFile属性一样。

但是如果我取消注释该行,在发布 API 后,我的 CPU 将开始突发,但程序除了打印这些日志外什么也不做:

Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request starting HTTP/1.1 POST http://localhost:44388/api/v1/photo multipart/form-data; boundary=--------------------------565570716756230895912873 30896
Microsoft.AspNetCore.Routing.EndpointMiddleware:Information: Executing endpoint 'MyProject.Controllers.PhotoController.Upload (MyProject)'
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Route matched with {action = "Upload", controller = "Photo", page = ""}. Executing controller action with signature System.String Upload(MyProject.Controllers.TestMultipartModel) on controller MyProject.Controllers.PhotoController (MyProject).

但它应该在这 3 行之后打印这一行(当然,运行我的Upload方法(。

Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Executing action method MyProject.Controllers.PhotoController.Upload (MyProject) - Validation state: Valid
经过

几个小时的调试,我仍然不知道如何解决这个问题。

如果有人可以告诉我 1( 如果这是来自 Microsoft 的错误或 2( 我如何修复此错误(例如实现我自己的自定义 IModelBinder 或其他东西(,我将不胜感激!

使用关键字aspnetcore ModelBinding infinite loop谷歌搜索后,我在此链接中找到了答案。

似乎Microsoft已经在 Asp.Net Core 3.0 中修复了这个错误,所以我现在要做的就是说服我的团队升级我们的项目......

相关内容

最新更新