我是一个大型C#API项目的一部分,由于Swagger文档中显示了不需要的属性(我们正在使用Swashbuckle生成它),因此我们遇到了客户端混乱的问题
最简单的形式是:
我们有一个只有ID和Description属性的简单类。
在POST上,我们不需要发送ID(将自动生成ID)。但是在GET和其他动词上,ID必须返回/发送
我们愿意为所有这些端点使用完全相同的模型(为简单起见),但将ID从POST请求文档中排除
如果它被端点(而不是动词)排除,那就太好了-因为我敢肯定,我们会遇到某些不是动词特定的情况。
答案 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
}
希望这会有所帮助。