Saltar al contenido

Swagger no funciona correctamente con varias versiones de la aplicación ASP.NET WebApi

Posteriormente a consultar con especialistas en esta materia, programadores de varias áreas y profesores hemos dado con la solución al dilema y la dejamos plasmada en esta publicación.

Solución:

Resuelto por:

  1. Agregando el Microsoft.AspNet.WebApi.Versioning.ApiExplorer paquete
  2. Usando el explorador de API versionado como se muestra a continuación (tenga en cuenta que tuve que mover el código de SwaggerConfig.cs en WebApiConfig.cs debido a problemas de inicialización):

        var apiExplorer = config.AddVersionedApiExplorer(options => 
            options.GroupNameFormat = "'v'VVV";
        );
    
        var versionSupportResolver = new Func((apiDescription, version) => apiDescription.GetGroupName() == version);
    
        var versionInfoBuilder = new Action(info => 
            foreach (var group in apiExplorer.ApiDescriptions)
            
                info.Version(group.Name, $"MyAPI vgroup.ApiVersion");
            
        );
    
        config
            .EnableSwagger("apiVersion/swagger", swagger => 
                swagger.OperationFilter();
                swagger.MultipleApiVersions(versionSupportResolver, versionInfoBuilder);
                swagger.IncludeXmlComments(WebApiConfig.XmlCommentsFilePath);
            )
            .EnableSwaggerUi(swaggerUi => 
                swaggerUi.EnableDiscoveryUrlSelector();
                swaggerUi.DocExpansion(DocExpansion.List);
            );
    

ingrese la descripción de la imagen aquí

ValueV1Controller.cs

[RoutePrefix("api/v1/value")]
public class ValueV1Controller : ApiController

    [Route("get")]
    public IEnumerable Get()
    
        return new string[]  "value1", "value2" ;
    

ValueV2Controller.cs

[RoutePrefix("api/v2/value")]
public class ValueV2Controller : ApiController

    [Route("get")]
    public IEnumerable Get()
    
        return new string[]  "value1.2", "value2.2" ;
    

SwaggerConfig.cs

public class SwaggerConfig

    public static void Register()
    
        var thisAssembly = typeof(SwaggerConfig).Assembly;

        GlobalConfiguration.Configuration
            .EnableSwagger(c =>
            
                c.MultipleApiVersions(
                    (apiDesc, version) =>
                    
                        var path = apiDesc.RelativePath.Split('/');
                        var pathVersion = path[1];

                        return CultureInfo.InvariantCulture.CompareInfo.IndexOf(pathVersion, version, CompareOptions.IgnoreCase) >= 0;
                    ,
                    (vc) =>
                    
                        vc.Version("v2", "Swashbuckle Dummy API V2");
                        vc.Version("v1", "Swashbuckle Dummy API V1");
                    );
            )
            .EnableSwaggerUi(c =>
            
                c.EnableDiscoveryUrlSelector();
            );
    

Si posees alguna desconfianza o capacidad de aumentar nuestro crónica eres capaz de realizar una observación y con gusto lo leeremos.

¡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 *