C# 带有<;示例>;标记不能与Swagger一起工作(Swashback.aspnetcore)
我正在使用summary和example标记来编写swagger文档。 我对标记有问题,当我使用数组时,swagger无法识别它: 我使用swashback.aspnetcore包Nuget 例如:C# 带有<;示例>;标记不能与Swagger一起工作(Swashback.aspnetcore),c#,asp.net-core,swagger,C#,Asp.net Core,Swagger,我正在使用summary和example标记来编写swagger文档。 我对标记有问题,当我使用数组时,swagger无法识别它: 我使用swashback.aspnetcore包Nuget 例如: [DataContract] public class HeaderResponse { /// <summary> /// Statut code /// </summary> ///<e
[DataContract]
public class HeaderResponse
{
/// <summary>
/// Statut code
/// </summary>
///<example>400</example>
[DataMember]
public int StatusCode { get; set; }
/// <summary>
/// Title
/// </summary>
/// <example>Erreur sur methode1</example>
[DataMember]
public string Title { get; set; }
/// <summary>
/// List of errors
/// </summary>
///<example>["entry1", "entry2", "entry3"]</example>
[DataMember]
public List<string> ErrorList { get; } = new List<string>();
}
除了使用ISchemaFilter处理数组类型的标记之外,没有其他方法了吗?我也有同样的问题,我尝试了这个方法。您可以在属性的名称上添加一个条件,并添加null返回,以避免丢失其他属性上的示例。但最好的解决方案是能够找到一个通用的解决方案。如何使用ISchemaFilter获取示例标记和属性名?这是我的解决方案:
public void Apply(OpenApiSchema schema, SchemaFilterContext context)
{
schema.Example = GetExampleOrNullFor(schema, context);
}
private IOpenApiAny GetExampleOrNullFor(OpenApiSchema schema, SchemaFilterContext context)
{
switch (context.Type.Name)
{
case "MyClass":
foreach (var property in schema.Properties)
{
//Array property, which wraps its elements
if (property.Value.Type == "array")
{
if (property.Key == "MyProperty1")
{
var array = new OpenApiArray();
array.Add(new OpenApiString("item1"));
array.Add(new OpenApiString("item2"));
property.Value.Example = array;
}
else if (property.Key == "MyProperty2")
{
var array = new OpenApiArray();
array.Add(new OpenApiString("item1"));
property.Value.Example = array;
}
}
}
return null;
default:
return null;
}
}
您可以尝试这样做:
public List<string> ErrorList { get; } = new List<string>{"entry1", "entry2", "entry3"};
结果:
好的,谢谢,它正在工作,但我不希望通过初始化属性或构造函数来完成。我希望通过使用ISchemaFilter还有另一个解决方案:)此解决方案的问题是,在这种情况下,您的客户端不提交错误列表属性的值,而不是获取null或空数组,您将拥有填充的数组,这意味着如果您需要非空的验证器,它现在必须查询内容和据此行动。
public List<string> ErrorList { get; } = new List<string>{"entry1", "entry2", "entry3"};
[DataContract]
public class HeaderResponse
{
public HeaderResponse()
{
ErrorList = new List<string> {"entry1", "entry2", "entry3" };
}
/// <summary>
/// Statut code
/// </summary>
///<example>400</example>
[DataMember]
public int StatusCode { get; set; }
/// <summary>
/// Title
/// </summary>
/// <example>Erreur sur methode1</example>
[DataMember]
public string Title { get; set; }
/// <summary>
/// List of errors
/// </summary>
[DataMember]
public List<string> ErrorList { get; set; }
}
[HttpPost("TestPar")]
public IActionResult TestPar(HeaderResponse h)
{
return Json(h);
}