代码之家  ›  专栏  ›  技术社区  ›  Mike Perrenoud

无法运行的iformfile的post

  •  1
  • Mike Perrenoud  · 技术社区  · 6 年前

    我有一个.NET核心应用程序,它有一个名为 Documents 用一个 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; }
    }
    

    很简单。然后我有一个 在邮递员中配置的请求如下:

    • 网址: http://localhost:9090/api/documents
    • 身体: 配置为 form-data 我有 Name , Description File 全部配置在键值对接口中。此外, 文件 设置为 file 输入以便我可以浏览文件。

    执行此命令时 这个 DocumentsController 执行构造函数,应用程序细节表明 PostAsync 匹配:

    激活的事件持续时间线程 application insights:trace“路由与{action=”postsync“,controller=”documents“}匹配。正在执行操作tdllims.mediaservice.controller.documentscontroller.postsync(tdllims.mediaservice)”

    然而,它从未进入行动。我的直觉告诉我模型绑定失败了。这有两个原因。首先,所有其他的路由工作都是根据应用程序的洞察力进行的。第二,如果我完全删除参数,它就会进入操作。我试过的:

    • 补充 [FromForm] createDocumentRequest
    • 只接受 IFormFile 把复杂的物体扔进行动中
    • 拆分 创建文档请求 分成三个不同的参数
    • 还有其他一些不那么重要的东西

    现在,我怀疑当我们设置MVC时,我们可能会遗漏一些东西。我们正在配置一些东西,但是我觉得我们缺少一个格式化程序 multipart/form-data 不知何故。我这么想是因为我们用 AddMvcCore 而不是 AddMvc :

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

    最后,我可以确认控制器工作正常,因为我有一个 GET 这是可访问的,并使其成为操作:

    [HttpGet("{id}")]
    public async Task<IActionResult> GetAsync(int id)
    
    0 回复  |  直到 6 年前
        1
  •  1
  •   Mike Perrenoud    6 年前

    最后,问题是文件的大小。如果.NET Core抛出错误而不是返回 200 当类似的事情发生时。我试图上传一些图片,我需要找出正确的方法来增加文件大小,但是当我上传了一个小文本文件时 POST 工作并将文件适当地反序列化为 IFormFile .

    我相信这些特质 RequestFormLimits RequestSizeLimit 最终将在设置最大文件大小方面发挥作用。