我正在开发一个 .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 的客户端出现问题。
我尝试过的:
我的问题是: 当 IFormFile 参数包装在 Minimal API 项目的模型类中时,如何配置 NSwag 来正确生成 IFormFile 参数的 Swagger 文档?
任何帮助或指示将不胜感激!
将
[FromForm]
更改为 [AsParameters]
。这是我的测试代码。
app.MapPost("/upload", ([AsParameters] FileUploadModel model) =>
{
// Handle file upload
return Results.Ok();
});
测试结果
相关链接