Swashbuckle复杂的对象成员装饰

时间:2017-07-12 13:22:58

标签: swagger swashbuckle

我很难找到如何在.NET Core WebAPI项目中使用Swashbuckle.AspNetCore(通过nuGet包管理器提供的最新版本)作为我的操作的参数来标记复杂对象的必需成员。

我已经实现了一个自定义IOperationFilter,它为操作参数添加了一个required = true标志,但显然它没有通过复杂对象定义,因此所有成员仍然被标记为可选。

我想获得的是:

definitions:   
  ComplexObjectParameters:
    description: 'my complex object parameter'
    type: object
    required: ['parameter1', 'parameter2']
    properties:
      parameter1:
        type: string
      parameter2:
        type: string
      parameter3:
        type: string

你知道我怎么能实现这个吗?

编辑:演示我的问题的演示项目可在此处获取:https://github.com/albator1932/ComplexObjects

1 个答案:

答案 0 :(得分:0)

使用 IDocumentFilter 并将 [必需] 添加到所需的字段中:

internal class AddComplexObjectRequiredParameter : IDocumentFilter
{
    public void Apply(SwaggerDocument swaggerDoc, DocumentFilterContext context)
    {
        if (swaggerDoc.Definitions != null)
        {
            if (swaggerDoc.Definitions["ComplexObjectParameters"].Required == null)
                swaggerDoc.Definitions["ComplexObjectParameters"].Required = new List<string>();
            foreach (var field in typeof(ComplexObjectParameters).GetFields())
            {
                if (Attribute.IsDefined(field, typeof(RequiredAttribute)))
                    swaggerDoc.Definitions["ComplexObjectParameters"].Required.Add(field.Name);
            }
        }
    }
}