我正在使用具有以下定义的服务:
[HttpGet]
[SwaggerOperation(nameof(GetAnimal))]
[Route("{animalId:long}", Name = nameof(GetAnimal))]
[ProducesResponseType(typeof(AnimalModel), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ErrorModel), StatusCodes.Status500InternalServerError)]
public Task<IActionResult> GetAnimal(string tenantId, long animalId)
{
try
{
// Find the actual animal.. somewhere.
return Ok(new AnimalModel());
}
catch (Exception exception)
{
return InternalServerError(new ErrorModel());
}
}
这似乎会导致autorest
生成一个object
返回类型为 a 的 C# 客户端(我猜是因为该ProducesResponseType
属性被指定了两次):
public async Task<HttpOperationResponse<object>> GetAnimalWithHttpMessagesAsync(string tenantId, long animalId, [..])
问题
处理返回不同对象的 API 的推荐方法是什么?
潜在的解决方案
- 我可以修复客户端代码并转换结果以找到正确的类型(不好)。
- 我可以修改 API(如果可能的话),使它只返回一个由 the
AnimalModel
和 the组成的对象ErrorModel
(可能会更好)。