Swagger 显示过时的消息

Nov*_*545 6 swagger swagger-ui swashbuckle

以此为例:

[Obsolete("Please use /Auth/Register instead")]
Run Code Online (Sandbox Code Playgroud)

Swaggers UI 显示其 Obsolte 但不显示消息,那么是否可以在 Swagger UI 中显示属性内的消息?(无需像这篇文章所说的那样更改库)我使用 Swashbuckle.AspNetCore(默认为 ASP.NET)v6.3(OpenAPI / Swagger v2.0、v3.0)

小智 1

这可以在 Swashbuckle 中使用操作过滤器来完成:

internal class ObsoleteOperationFilter : IOperationFilter
{
    public void Apply(OpenApiOperation operation, OperationFilterContext context)
    {
        operation.Description = operation.Deprecated ? context.MethodInfo.GetCustomAttribute<ObsoleteAttribute>()?.Message : operation.Description;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在 SwaggerGen 配置中添加过滤器:

builder.Services.AddSwaggerGen(options =>
{
    options.OperationFilter<ObsoleteOperationFilter>();
    ...
});
Run Code Online (Sandbox Code Playgroud)

现在,操作的描述将替换为来自“过时”属性的消息。