端点的多重响应类型

Ech*_*ion 6 c# swagger openapi asp.net-core-webapi

我有一个端点来查询有关“人”的详细信息。问题是,响应的类型可能是“PhysicalPerson”或“LegalPerson”。两者都继承相同的“BasePerson”类。

这是我当前的代码:

[HttpGet("personne/{idpersonne}")]
[ProducesResponseType(typeof(PersonneMoraleType), (int)HttpStatusCode.OK)]
[ProducesResponseType(typeof(PersonnePhysiqueType), (int)HttpStatusCode.OK)]
public async Task<ActionResult> GetPerson(string idpersonne, [FromQuery] bool avecDocuments = false)
{
    return Ok(await _app.LraConnector.LirePersonne(idpersonne, avecDocuments));
}
Run Code Online (Sandbox Code Playgroud)

问题,swagger 仅描述第二种类型(物理),但如果我回答 LegalPerson,它会抛出方案异常。如果我使用“BasePerson”,两个答案都可以正常工作,但描述不正确。

我可以做些什么来改善这一点吗?

Tho*_*ard 1

我认为 swagger 不支持这一点,因为 iirc 响应是一个以状态代码为键的字典。

如果您更改其中一个响应以返回 OK 以外的任何内容,那么它将返回您的模型。

但我认为这不是你想要的。您可以创建一个这样的模型:

public class Person
{
    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public PhysicalPerson PhysicalPerson { get; set; }
    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public OtherPerson OtherPerson { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后将数据绑定到正确的属性并返回该对象作为 200 响应。