【问题标题】:Add default value to Swagger path parameters为 Swagger 路径参数添加默认值
【发布时间】:2021-12-22 06:07:20
【问题描述】:

我在 .NET CORE 6 中制作了一个 WebAPI。

我有一个这样的控制器类:

    [ApiController]
    [Route("{culture:culture}/[controller]")]
    [SwaggerDefaultValue("culture", "en-US")]
    [Produces("application/json")]
    public class AccountsController : BaseController
    {
         ...
    }

如您所见,我在路由中定义了一个参数,例如 {culture:culture}

我想在我的 Swagger 中为这个参数设置一个默认值。

我这样定义了一个属性类:

    [AttributeUsage(AttributeTargets.Class )]
    public class SwaggerDefaultValueAttribute:Attribute
    {
        public string Name { get; set; }
        public string Value { get; set; }

        public SwaggerDefaultValueAttribute(string name, string value)
        {
            Name = name;
            Value = value;
        }
    }

还有一个像这样的过滤器类:

    public class SwaggerDefaultValueFilter : IOperationFilter
    {
        public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
           // needs some code
        }
    }

并将过滤器也添加到我的 Swagger 服务中。

options.OperationFilter<SwaggerDefaultValueFilter>();

但是,问题在于我发现的大多数代码示例都与旧版本的 Swagger 相关,并且它们的大多数方法已被弃用(例如 this one)。

问题是,如何修改这个 SwaggerDefaultValueFilter 类以在我的路径参数中显示默认值:

仅供参考: 我正在使用&lt;PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="6.2.3" /&gt;

我也找到了这个sample,但是,它没有设置路径参数的默认值,它似乎适用于模型属性。

【问题讨论】:

    标签: c# asp.net-core swagger


    【解决方案1】:

    不是Swashbuckle.AspNetCore,但这可能会让你走上正确的道路:

    控制器:
    https://github.com/heldersepu/Swagger-Net-Test/blob/master/Swagger_Test/Controllers/CompanyController.cs#L35-L39

            [Route("Get2")]
            public Company Get2([FromUri] Company c)
            {
                return c;
            }
    

    型号:
    https://github.com/heldersepu/Swagger-Net-Test/blob/master/Swagger_Test/Models/Company.cs

        public class Company
        {
            /// <summary>The Unique Company ID</summary>
            /// <example>123</example>
            [Required]
            [DefaultValue(456)]
            public int Id { get; set; }
    
            [Required]
            [DefaultValue(null)]
            public int? MyId { get; set; }
    
            /// <summary>The Company Name</summary>
            /// <example>Acme co</example>
            [DefaultValue("My Company")]
            public string Name { get; set; }
    

    直播代码:
    http://swagger-net-test.azurewebsites.net/swagger/ui/index?filter=Company#/Company/Company_Get2

    【讨论】:

    • 我的问题是关于路径参数的默认值,而不是模型属性。
    • @MJBZA 你认为这些默认值来自哪里?
    猜你喜欢
    • 2018-06-20
    • 2019-12-03
    • 1970-01-01
    • 2019-03-26
    • 2019-07-29
    • 2019-10-29
    • 2019-06-30
    • 1970-01-01
    • 2020-01-14
    相关资源
    最近更新 更多