是否可以在 Swagger UI 的参数部分显示请求正文对象?

Is it possible to show request body objects in the parameters section of Swagger UI?

我在我的 .Net Core Web API 项目中使用 Swashbuckle。像往常一样,我有一些 GET 和 POST 请求。

这是一个例子:

/// <summary>
/// Test request
/// </summary>
[HttpPost("Test")]
[Consumes("application/json")]
[Produces("application/json")]
[SwaggerResponse(200, "Request Executed", typeof(ResponseObject))]
public IActionResult Test([FromBody] TestObject t)
{
    var response = new ResponseObject
    {
        Id = t.Id,
        Name = t.Name,
    };

    return Content(response.JsonSerialize());
}

使用过的对象:

/// <summary>
/// An example object
/// </summary>
public class TestObject
{
    /// <summary>
    /// Object ID
    /// </summary>
    public string Id { get; set; }

    /// <summary>
    /// Object name
    /// </summary>
    public string Name { get; set; }
}

/// <summary>
/// An example object
/// </summary>
public class ResponseObject
{
    /// <summary>
    /// Object ID
    /// </summary>
    public string Id { get; set; }

    /// <summary>
    /// Object name
    /// </summary>
    public string Name { get; set; }
}

结果如下:


我希望看到的是 "Parameters" 部分中的反序列化对象,正如我在其他一些 Swagger/Swashbuckle 样本(例如 Petstore)中看到的那样。或者,至少,类似于 OpenAPI v2 规范中的 `c.SerializeAsV2 = true;`:

所以,问题是,是否可以在“参数”部分显示反序列化的对象?

由于您使用的是对象而不是查询字符串参数,因此 TestObject 的属性将不会单独显示,因为对象正在封装。

具有单独的字段用于查询字符串参数。

您可以创建 custom Swagger layouts 来显示您喜欢的数据,但我建议保持原样,以符合 Swagger UI 的普遍期望。

也可以随意将两者结合起来;那也行。