如何实现同时接收文件与DTO的ASP.NET Core控制器方法?
问题:Multipart请求同时接收文件与嵌套DTO的控制器实现问题
我需要实现一个控制器方法,支持在同一次multipart请求中同时接收文件和嵌套结构的DTO,并且要生成包含嵌套类型定义的正确OpenAPI规范。
简化代码示例
实际项目中SimpleDTO包含枚举、自定义类型等复杂属性,以下是简化版本:
public class SimpleDTO { public string Property1 { get; set; } public string Property2 { get; set; } // 其他属性... } public class RequestWrapper { public IFormFile File { get; set; } public SimpleDTO? SimpleDto { get; set; } } [Post] public async Task<IActionResult> TestMethod([FromForm]RequestWrapper dto) { // 业务逻辑... return Ok(); }
当前问题
使用Postman测试该接口时返回400状态码,但如果将RequestWrapper中的SimpleDto属性替换为int等简单类型,接口可以正常运行。我尝试过为控制器参数和SimpleDTO类添加自定义模型绑定,但没有解决问题。
期望生成的OpenAPI规范
我需要生成如下结构的OpenAPI规范,确保基于该规范生成的客户端能正常调用接口:
requestBody: content: multipart/form-data: schema: type: object properties: file: type: string format: binary SimpleDto: $ref: '#/components/schemas/SimpleDTO' responses: '200': description: Success
备选方案(尽量不想采用)
将SimpleDTO单独作为方法参数,从请求体中手动获取文件,再通过OperationFilters为OpenAPI规范添加文件相关定义。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

