C# 带有<;示例>;标记不能与Swagger一起工作(Swashback.aspnetcore)

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

我正在使用summary和example标记来编写swagger文档。 我对标记有问题,当我使用数组时,swagger无法识别它:

我使用swashback.aspnetcore包Nuget

例如:

[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);
        }