我想在.NET7的最小API中为我的端点添加答案的示例.
我已经找到了几个有趣的资源,但它们都不能在最小的API环境中工作:
- https://www.dotnetnakama.com/blog/enriched-web-api-documentation-using-swagger-openapi-in-asp-dotnet-core/#api-examples-request-and-response个
- https://medium.com/@niteshsinghal85/multiple-request-response-examples-for-swagger-ui-in-asp-net-core-864c0bdc6619个
这些是我期望的渲染类型,即状态代码,及其描述和特定的端点(例如,假设我有针对不同情况的400个响应,我希望能够通过不同的描述和响应示例来区分它们).
例如,假设我有以下启动:
public class Startup
{
public IConfiguration Configuration
{
get;
}
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
/* ... */
// Swagger services
services.AddEndpointsApiExplorer();
services.AddSwaggerGen(BuilderUtils.SwaggerOptions());
/* ... */
}
public void Configure(WebApplication app)
{
// Swagger activation
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
/* ... */
app.MapMyEndpoints();
app.Run();
}
}
}
使用以下方法:
public static void MapMyEndpoints(this WebApplication app)
{
app.MapGet("/api/foo", () => return await Foo())
.WithOpenApi(op => new(op)
{
OperationId = "MyOperationId",
Tags = new List<OpenApiTag> { new() { Name = "MyTag" } },
Summary = "MySummary",
Description = "MyDescription"
});
app.MapGet("/api/bar", () => return await Bar())
.WithOpenApi(op => new(op)
{
OperationId = "MyOperationId",
Tags = new List<OpenApiTag> { new() { Name = "MyTag" } },
Summary = "MySummary",
Description = "MyDescription"
});
}
两者都将使用MessageBody类进行响应:
public class MessageBody
{
public string? Message { get; set; }
public string? Error { get; set; }
}
例如,foo将使用MessageBody: Message="已连接",
或使用MessageBody的400: 错误="密码错误" 或错误="找不到帐户"
其他终端也是如此.
我想在我的Swagger里报告所有这些情况.
因为我使用最少的API工作,所以我不能使用示例过滤器,或者如果我可以,我不知道如何使用.
如果有人对我如何做到这一点有任何提示,我将不胜感激!