如何在某些端点上从Swagger文档中排除属性

时间:2018-10-12 06:32:39

标签: c# swagger swashbuckle

我是一个大型C#API项目的一部分,由于Swagger文档中显示了不需要的属性(我们正在使用Swashbuckle生成它),因此我们遇到了客户端混乱的问题

最简单的形式是:

  • 我们有一个只有ID和Description属性的简单类。

  • 在POST上,我们不需要发送ID(将自动生成ID)。但是在GET和其他动词上,ID必须返回/发送

我们愿意为所有这些端点使用完全相同的模型(为简单起见),但将ID从POST请求文档中排除

如果它被端点(而不是动词)排除,那就太好了-因为我敢肯定,我们会遇到某些不是动词特定的情况。

1 个答案:

答案 0 :(得分:0)

我通常使用完全独立的模型,因为我通常遵循CQRS模式,所以当我通过POST或PUT发送命令时,我在GET中查询的内容通常看起来不那么接近,但是我想您可以像这样的东西:

public class AddUpdateAddressType
{
    [Required]
    [StringLength(50, MinimumLength = 2)]
    public string Name { get; set; }

    public string Description { get; set; }
}

public class AddressType : AddUpdateAddressType {

    [JsonProperty(Order = -10)]
    public int Id { get; set; }

    [JsonProperty(Order = 98)]
    [DataType(DataType.DateTime)]
    public DateTime CreatedOn { get; set; }

    [JsonProperty(Order = 99)]
    [DataType(DataType.DateTime)]
    public DateTime ModifiedOn { get; set; }

}

然后在控制器操作中,GET方法用

装饰
    [HttpGet("{id:int}")]
    public async Task<IActionResult> Get(int id)
    {
         // fetch and return Address
    }

和您的POST(或PUT)方法可能看起来像这样

    [HttpPost]
    public async Task<IActionResult> Add(AddAddressType addressType)
    {
        // save AddAddress and return whatever
    }

希望这会有所帮助。