Saltar al contenido

¿Swagger (Asp.Net Core) tiene una descripción de controlador?

Solución:

Si está utilizando Swashbuckle 4.0.xy ASP.NET Core 2.x, es posible que tenga algo como esto que también funciona al incluir el paquete NuGet para Swashbuckle.AspNetCore.Annotations.

using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Swashbuckle.AspNetCore.Annotations;

namespace MyExample.Controllers
{
/// <summary>
/// Example of a .NET Core controller based on the controller name
/// api/[controller] on ValuesController becomes api/values
/// endpoint: "/Values" from [controller] and name of controller , which is "ValuesController"
/// </summary>
[Route("[controller]")]
[ApiController]
[SwaggerTag("This is an example controller generated by ASP.NET Core 2.x")]
public class ValuesController : ControllerBase
{
...
}

Entonces mi código Swagger Startup.cs en el método ConfigureServices se ve así, (editado para incluir la contribución de Iain Carlin para incluir comentarios del encabezado del controlador):

services.AddSwaggerGen(c =>
{
    // Set Title and version
    c.SwaggerDoc("v1", new Info { Title = "My Example API", Version = "v1", Description = "The API for my application" });
    // Set the comments path for the Swagger JSON and UI.
    var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
    var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
    // pick comments from classes, including controller summary comments
    c.IncludeXmlComments(xmlPath, includeControllerXmlComments: true); 
    // _OR_ enable the annotations on Controller classes [SwaggerTag], if no class comments present
    c.EnableAnnotations();
});

Entonces mi controlador se decorará

Resultado de SwaggerTag en Swashbuckle

Estaba buscando una respuesta similar y esperaba poder usar los comentarios XML resumidos en la clase del controlador para proporcionar la descripción del controlador. Resulta que puede hacer esto agregando includeControllerXmlComments: true en la configuración de Swagger en el inicio:

    services.AddSwaggerGen(c =>
    {
        // Set the comments path for the Swagger JSON and UI.
        var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
        var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
        c.IncludeXmlComments(xmlPath, includeControllerXmlComments: true);
    });

Por lo que entonces:

    /// <summary>
    /// My controller description
    /// </summary>
    [Route("api/[controller]")]
    [ApiController]

se muestra como:

ingrese la descripción de la imagen aquí

¿Hay alguna forma de mostrar arrogancia “XYZ – Una colección de API XYZ”?

Si. Esta es una de las formas más sencillas. La versión ASP.NET Core de Swagger aprovecha la ApiExplorerSettings atributo. Puede configurar el GroupName.

public class BobController 
{
    [ApiExplorerSettings(GroupName="XYZ - A collection of XYZ APIs")]
    public IActionResult MyAction() 
    {
        ...
    }
}

El nombre del grupo aparece en la interfaz de usuario de Swagger con las acciones del grupo enumeradas como operaciones debajo.

ingrese la descripción de la imagen aquí

Editar: Aquí hay una idea basada en el comentario de SledgeHammer.

Swagger ASP.NET Core usa un IApiDescriptionGroupCollectionProvider para construir sus grupos de descripción. Podríamos implementar el nuestro, usando el valor predeterminado ApiDescriptionGroupCollectionProvider en busca de inspiración y registre a nuestro proveedor durante Startup.ConfigureServices. Nuestra implementación haría que el ApiDescriptionGroups() método devuelve el GroupName asociado con el controlador de cada acción. Entonces podríamos poner el ApiExplorerSettings atributo en cada controlador en lugar de en cada acción.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *