Sovasava
Sovasava

Reputation: 53

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

I am using Swashbuckle with my .Net Core Web API project. I have some GET and POST requests, as usual.

Here's an example:

/// <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());
}

Used objects:

/// <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; }
}

And here's the result: Text


What am I expecting to see is a deserialized object in "Parameters" section, as I saw in some other Swagger/Swashbuckle samples (Petstore, for example). Or, at least, something like in OpenAPI v2 specification with `c.SerializeAsV2 = true;`:

Text

So, the question is, is it possible to display a deserialized object in "Parameters" section?

Upvotes: 4

Views: 9616

Answers (1)

Ermiya Eskandary
Ermiya Eskandary

Reputation: 23672

Since you’re using an object & not query string parameters, TestObject’s properties won’t be displayed separately as an object is encapsulating.

Having separate fields are for query string parameters.

You can create custom Swagger layouts to display data however you’d like but I’d recommend to keep it as it is, to fall in line with common expectations of the Swagger UI.

Also feel free to have a combination of both; that would also work.

Upvotes: 3

Related Questions