当文件参数包装在模型类中时,NSwag 在 Minimal API 中为 IFromFile 生成不正确的输出

问题描述 投票:0回答:1

我正在开发一个 .NET 8 Minimal API (Web) 项目,并使用 NSwag 生成 Swagger 文档。我有一个接受文件上传的端点,并且文件参数包装在模型类中。但是,生成的 Swagger 文档无法正确表示文件参数。这是我的代码的简化版本:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="NSwag.AspNetCore" Version="14.1.0" />
  </ItemGroup>

</Project>
public class FileUploadModel
{
    public IFormFile File { get; set; }
}
var builder = WebApplication.CreateBuilder(args);

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddOpenApiDocument(config =>
{
    config.DocumentName = "Test";
    config.Title = "Test v1";
    config.Version = "v1";
});

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseOpenApi();
    app.UseSwaggerUi(config =>
    {
        config.DocumentTitle = "Test";
        config.Path = "/swagger";
        config.DocumentPath = "/swagger/{documentName}/swagger.json";
        config.DocExpansion = "list";
    });
}

app.MapPost("/upload", ([FromForm] FileUploadModel model) =>
{
    // Handle file upload
    return Results.Ok();
});

app.Run();

在生成的 Swagger UI 中,File 参数不显示为文件上传输入,而是显示为常规字符串输入。这会导致尝试使用 API 的客户端出现问题。

我尝试过的:

  1. 确保 NSwag 在我的项目中正确配置。
  2. 检查生成的OpenAPI规范,看看文件类型是否被正确识别。
  3. 在网上搜索类似问题,但没有找到有效的解决方案。

我的问题是: 当 IFormFile 参数包装在 Minimal API 项目的模型类中时,如何配置 NSwag 来正确生成 IFormFile 参数的 Swagger 文档?

任何帮助或指示将不胜感激!

.net swagger webapi nswag
1个回答
0
投票

[FromForm]
更改为
[AsParameters]
。这是我的测试代码。

app.MapPost("/upload", ([AsParameters] FileUploadModel model) =>
{
    // Handle file upload
    return Results.Ok();
});

测试结果

enter image description here

相关链接

  1. 绑定到表单

  2. 在复杂对象中使用 IFormFile

enter image description here

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.