gpt4 book ai didi

c# - 如何为 Swagger UI 定义参数的默认值?

转载 作者:行者123 更新时间:2023-12-01 14:36:52 28 4
gpt4 key购买 nike

我将 Swagger/Swashbuckle 集成到 .NET Core 2.2 API 项目中。一切都很好,我所要求的纯粹是为了方便。考虑以下 API 方法:

public Model SomeEstimate(SomeRequest request) {
return Manager.GetSomeEstimate(request);
}
...
public class SomeRequest {
public string StreetAddress { get; set; }
public string Zip { get; set; }
}

当我点击/swagger/index.html 并想尝试这个 API 时,我总是必须输入 StreetAddress 和 Zip 值。

有没有办法为 StreetAddress 和 Zip 提供默认值?此 answer建议放置[DefaultValue("value here")] 属性的每个属性 SomeRequest类(class)。它可能适用于常规 .NET,但不适用于 .NET Core。

是否可以为 Swagger UI 的参数提供默认值?

最佳答案

要在 .NET Core 中为 Swagger UI 定义参数的默认值,请使用以下 article为 Model 类中的 DefaultValue 属性定义自定义架构过滤器。下面显示的代码取自本文,纯粹是为了告知有此问题或遇到类似问题的其他人:

在模型中装饰所需的属性:

public class Test {
[DefaultValue("Hello")]
public string Text { get; set; }
}

主过滤器:
using System.Collections.Generic;
using System.ComponentModel;
using System.Reflection;
using Swashbuckle.AspNetCore.Swagger;
using Swashbuckle.AspNetCore.SwaggerGen;

namespace Project.Swashbuckle {

public class SchemaFilter : ISchemaFilter {

public void Apply(Schema schema, SchemaFilterContext context) {
if (schema.Properties == null) {
return;
}

foreach (PropertyInfo propertyInfo in context.SystemType.GetProperties()) {

// Look for class attributes that have been decorated with "[DefaultAttribute(...)]".
DefaultValueAttribute defaultAttribute = propertyInfo
.GetCustomAttribute<DefaultValueAttribute>();

if (defaultAttribute != null) {
foreach (KeyValuePair<string, Schema> property in schema.Properties) {

// Only assign default value to the proper element.
if (ToCamelCase(propertyInfo.Name) == property.Key) {
property.Value.Example = defaultAttribute.Value;
break;
}
}
}
}
}

private string ToCamelCase(string name) {
return char.ToLowerInvariant(name[0]) + name.Substring(1);
}
}
}

最后将其注册到您的 Swagger 选项(在 Startup.cs 中):
services.AddSwaggerGen(c => {
// ...
c.SchemaFilter<SchemaFilter>();
});

关于c# - 如何为 Swagger UI 定义参数的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55051497/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com