Swagger默认"示例值"用于自定义类

时间:2017-06-14 04:02:29

标签: c# asp.net json swagger

这是

的扩展

Json conversion in ASP.NET for CQRS

由此我们创建了一个类来处理API的可选null-capable参数。

现在我希望swagger doc能够匹配该类,并且希望有一种通用的方法来实现这一目标

目前它看起来像这样:

{
  "description": {
    "value": "string",
    "hasValue": true
  }
}

当实际需要的JSON是这样的时候:

{
  "description": "string"
}

与前一个问题一样,我对所涉及的图书馆有了新的认识,谷歌搜索也没有帮助,所以非常感谢对Swagger默认设置的帮助。

1 个答案:

答案 0 :(得分:0)

所以我自己想出来了 - 以为我会发布答案以防其他人以后再使用它。

此类创建一个过滤文档的操作,将值从内部类型直接复制到外部类型

/// <summary>
/// Sets up the swagger documentation for the optional property
/// </summary>
public static class SwaggerOptionalPropertyFilter
{
    /// <summary>
    /// Get the action that applies the swagger documentation for the optional property
    /// </summary>
    public static Action<SwaggerDocument, HttpRequest> GetFilter()
    {
        return (document, request) =>
        {
            foreach (var kvp in document.Definitions)
            {
                if (!kvp.Key.Contains("OptionalProperty")) continue;

                var val = kvp.Value.Properties.Values.FirstOrDefault();

                if (val == null) continue;

                foreach (var pi in typeof(Schema).GetProperties())
                    pi.SetValue(kvp.Value, pi.GetValue(val, null), null);
            }
        };
    }
}

然后应用它就像改变一样简单:

app.UseSwagger();

要:

app.UseSwagger(c => { c.PreSerializeFilters.Add(SwaggerOptionalPropertyFilter.GetFilter()); });