指定 swagger 的示例请求 "Try it out"

Specify example requests for swagger's "Try it out"

有没有办法指定 swagger 的示例请求?甚至多个?

Try it out 按钮仅显示通用值,例如:

{
    "firstName": "string",
    "lastName": "string"
}

为了

public class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

当您必须首先编辑所有值时,使用大对象变得非常困难。我知道我可以使用 Postman,我也这样做,但是能够使用 swagger 创建 多个 好看且有用的示例会非常好。

使用 ASP.NET Core 3.1、Swagger OAS 3 和 Swashbuckle.AspNetCore 5.4.1,以下模型 class + XML 评论对我有用:-

    /// <summary>
    /// A user.
    /// </summary>
    public class User
    {
        /// <summary>
        /// The user's first name.
        /// </summary>
        /// <example>Jane</example>
        public string FirstName { get; set; }

        /// <summary>
        /// The user's last name.
        /// </summary>
        /// <example>Austin</example>
        public string LastName { get; set; }
    }

现在,当我单击 "Try it Out"(对于在消息正文中采用 User 模型的 POST 操作),我得到默认值:-

{
    "firstName": "Jane",
    "lastName": "Austin"
}

在 .Net5 中,您可以在 Startup.cs

中将 SchemaFilter 添加到 Swagger
public override void ConfigureServices(IServiceCollection services)
{
    services.AddSwaggerGen(c =>
    {
        c.SchemaFilter<ExampleSchemaFilter>();
    });
}

在 ExampleSchemaFilter.cs 中,您只需为特定的 class:

定义一个 OpenApiObject
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;

public class ExampleSchemaFilter : ISchemaFilter
{
    public void Apply(OpenApiSchema schema, SchemaFilterContext context)
    {
        if (context.Type == typeof(User))
        {
            schema.Example = new OpenApiObject()
            {
                ["firstName"] = new OpenApiString("John"),
                ["lastName"] = new OpenApiString("Doe"),
            };
        }
    }
}