gpt4 book ai didi

c# - IFormFile 的 POST 没有使其生效

转载 作者:太空宇宙 更新时间:2023-11-03 12:06:18 26 4
gpt4 key购买 nike

我有一个 .NET Core 应用程序,它有一个名为 Documents 的 Controller ,带有一个 POST 签名,如下所示:

[HttpPost]
public async Task<IActionResult> PostAsync(CreateDocumentRequest createDocumentRequest)

CreateDocumentRequest 如下所示:

public class CreateDocumentRequest
{
public string Name { get; set; }

public string Description { get; set; }

public IFormFile File { get; set; }
}

很简单。然后我在 Postman 中配置了一个 POST 请求,如下所示:

  • 网址: http://localhost:9090/api/documents
  • Body: 配置为 form-data 并且我有 NameDescriptionFile 都是在键值对接口(interface)中配置的。此外,File 被设置为 file 类型,因此它允许我浏览文件。

执行此 POST 时,DocumentsController 会执行构造函数,Application Insights 会指示 PostAsync 已匹配:

Activated Event Time Duration Thread Application Insights: Trace "Route matched with {action = "PostAsync", controller = "Documents"}. Executing action TdlLims.MediaService.Controller.DocumentsController.PostAsync (TdlLims.MediaService)"

但是,它永远不会进入 Action 。我的直觉告诉我模型绑定(bind)失败了。这是出于两个原因。第一,路由的所有其他部分都根据 Application Insights 工作。第二,如果我完全删除参数,它确实会进入 Action 。我试过的:

  • [FromForm] 添加到 createDocumentRequest
  • 只接受一个 IFormFile 到 Action 中,删除复杂对象
  • CreateDocumentRequest 拆分为三个不同的参数
  • 还有其他一些不太重要的事情

现在,我怀疑当我们设置 Mvc 时,我们可能遗漏了一些东西。我们正在配置一些东西,但我觉得我们缺少 multipart/form-data 的格式化程序。我有这种感觉,因为我们使用的是 AddMvcCore 而不是 AddMvc:

.AddAuthorization()
.AddJsonFormatters()
.AddApiExplorer()
.AddJsonOptions(options =>
{
options.SerializerSettings.Converters.Add(new OptionConverter());
options.SerializerSettings.Converters.Add(new StringEnumConverter());
});

最后,我可以确认 Controller 正常工作,因为我有一个可访问的 GET 并且它可以执行操作:

[HttpGet("{id}")]
public async Task<IActionResult> GetAsync(int id)

最佳答案

最后,问题是文件的大小。如果 .NET Core 在类似情况发生时抛出错误而不是返回 200 就好了。我试图上传一些图片,我需要找出增加文件大小的正确方法,但是当我上传一个小文本文件时,POST 起作用并且文件被反序列化正确地放入 IFormFile

我相信属性 RequestFormLimitsRequestSizeLimit 最终将在设置最大文件大小方面发挥作用。

关于c# - IFormFile 的 POST 没有使其生效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54758184/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com