是否有方法从示例值中排除/删除属性?
我使用c.IncludeXmlComments
在我的模型上使用XML注解来提供swagger页面上的信息我使用///<example>Example Value</example>
*XML标记 * 来设置示例值。我的请求模型并不要求默认设置所有字段,但是如果我不设置示例 *XML标记 *,示例值将被转换为它的类型。
{
"ID": "string",
"ExampleSetValue": "Example Value"
}
我希望示例值只包含ExampleSetValue属性,因此示例值如下所示
{
"ExampleSetValue": "Example Value"
}
这是我创业时的昂首阔步的设置
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", openApiInfo);
c.AddSecurityDefinition("Bearer", openApiSecurityScheme);
c.AddSecurityRequirement(openApiSecurityRequirement);
// Set the comments path for the Swagger JSON and UI.
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
c.IncludeXmlComments(xmlPath);
});
我的请求模型
public class CreateRequest
{
/// <summary>
/// ID of the user if available
/// </summary>
public string ID { get; set; }
/// <summary>
/// ExampleSetValue
/// </summary>
/// <example>Example Value</example>
public string ExampleSetValue { get; set; }
}
2条答案
按热度按时间js4nwp541#
Xml注解似乎不能用于排除属性。
如果你想忽略这个属性,我建议你使用
[System.Text.Json.Serialization.JsonIgnore]
属性,但是这样的话,当你序列化或者反序列化数据的时候,你的属性也会隐藏起来。如果您只想从示例值中排除属性,则需要自定义ISchemaFilter:
产品型号:
自定义ISchemaFilter:
注册过滤器:
3bygqnnd2#
我发现了一种完全符合我的情况的不同方法。您可以在您的模式上设置一个OpenApiObject类型的示例对象。
我创建了一个Document过滤器,它在我的swagger模式上循环。
创建了ExampleManager类,该类根据模式名称返回我想要的示例对象。
作为最后一步,创建了一个示例类,它完全符合我希望我的示例看起来的样子。
最终外观见Swagger页面