es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué Swagger no muestra el método con parámetro?

Tengo una aplicación minimalista de api de .NET 6.
Cuando uso un método con parámetro de tipo int como este:

app.MapGet("/calc/{sum1}", (int sum1) =>
{
    var msg = String.Format("Hola {sum1}");
    Log.Information("/calc/{0} respuesta: {1}", sum1, msg);
    return msg;
})
.WithName("Calc");

Entonces la página de Swagger me muestra este método con el parámetro y puedo probarlo.
Pero si uso un método como este:

app.MapGet("/calc3/{prod1}", (Product prod1, CalcSvc calcSvc) =>
{
    var msg = String.Format("Hola {prod1}");
    Log.Information("/calc3/{0} respuesta: {1}", prod1, msg);
    return msg;
})
.WithName("Calc3");

Entonces la página de Swagger muestra el método pero no muestra el parámetro.

¿Qué está mal?

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema con el método app.MapGet que utiliza un parámetro de tipo complejo es que Swagger UI no puede analizar la definición del tipo complejo y, por lo tanto, no puede mostrar la información del parámetro. Para hacer visible el parámetro en Swagger UI, puedes utilizar el atributo ProducesResponseType para especificar el tipo de retorno del método. Por ejemplo:

    [ProducesResponseType(typeof(string), StatusCodes.Status200OK)]
    app.MapGet("/calc3/{prod1}", (Product prod1, CalcSvc calcSvc) =>
    {
        var msg = String.Format($"Hola {prod1}");
        Log.Information("/calc3/{0} respuesta: {1}", prod1, msg);
        return msg;
    })
    .WithName("Calc3");
    

    En este ejemplo, hemos especificado que el método devuelve una cadena de texto (string) con un código de estado HTTP 200 utilizando el atributo ProducesResponseType. Esto permite que Swagger UI muestre correctamente el método y su parámetro.

Comments are closed.