为 swagger 的“试用”指定示例请求

t3c*_*b0t 5 c# json http-post swagger asp.net-core-webapi

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

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

{
    "firstName": "string",
    "lastName": "string"
}
Run Code Online (Sandbox Code Playgroud)

为了

public class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

And*_*ebb 19

使用 ASP.NET Core 3.1、Swagger OAS 3 和 Swashbuckle.AspNetCore 5.4.1,以下模型类 + 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; }
    }
Run Code Online (Sandbox Code Playgroud)

现在,当我单击“尝试一下”(对于User在消息正文中采用模型的 POST 操作)时,我得到默认值:-

{
    "firstName": "Jane",
    "lastName": "Austin"
}
Run Code Online (Sandbox Code Playgroud)

  • 我不确定是 Swagger 还是 Swashbuckle 在这里完成工作(或者也许它们都是),但基本上是的:它正在读取 `&lt;example&gt;` XML 注释,并在执行“Try it out”时使用该值作为默认值”。 (2认同)
  • @Monibrata 如果类型位于不同的项目中,请确保您正在输出该项目的 XML 文档,并将文件添加到 SwaggerGenOptions 中的 IncludeXmlComments 中,请参阅 /sf/answers/3558657091/ (2认同)

Mat*_*ler 18

在.Net5中,您可以在 Startup.cs 中向 Swagger 添加 SchemaFilter

public override void ConfigureServices(IServiceCollection services)
{
    services.AddSwaggerGen(c =>
    {
        c.SchemaFilter<ExampleSchemaFilter>();
    });
}
Run Code Online (Sandbox Code Playgroud)

在ExampleSchemaFilter.cs中,您只需为特定类定义一个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"),
            };
        }
    }
}
Run Code Online (Sandbox Code Playgroud)