Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

849
Vistas
¿Cómo ocultar el controlador de metadatos OData en Swagger?

Después de actualizar mi proyecto a .NET6 y OData a 8.0.4, apareció un nuevo controlador de metadatos con estos puntos finales:

ingrese la descripción de la imagen aquí

Quiero deshabilitarlo de alguna manera o eliminarlo de mi servicio.

Código para agregar el servicio OData:

Inicio.cs

 public void ConfigureServices(IServiceCollection services) { services .AddControllers(mvcOptions => mvcOptions.EnableEndpointRouting = false) .AddOData(opt => opt.AddRouteComponents("", GetEdmModel()).Select().Expand()); }

Versiones:

  • .NET6
  • ASP.NET Core 6
  • OData 8.0.4
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Hay varias opciones para solucionar esto:

  1. Puede usar el proveedor de funciones del controlador para excluir MetadataController
  2. Puede usar Conventions en ODataOptions para quitar MetadataRoutingConvention .
  3. Puede implementar DocumentFilter para ocultar MetadataController y esquemas relacionados del Swagger

#2 es la forma más simple:

 services .AddControllers() .AddOData(opt => { opt.Conventions.Remove(opt.Conventions.OfType<MetadataRoutingConvention>().First()); opt.AddRouteComponents("", GetEdmModel()).Select().Expand(); });

#3 Si solo desea ocultar MetadataController y los esquemas relacionados del Swagger:

 public class SwaggerODataControllerDocumentFilter : IDocumentFilter { public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context) { // remove controller foreach (ApiDescription apiDescription in context.ApiDescriptions) { var actionDescriptor = (ControllerActionDescriptor)apiDescription.ActionDescriptor; if (actionDescriptor.ControllerName == "Metadata") { swaggerDoc.Paths.Remove($"/{apiDescription.RelativePath}"); } } // remove schemas foreach ((string key, _) in swaggerDoc.Components.Schemas) { if (key.Contains("Edm") || key.Contains("OData")) { swaggerDoc.Components.Schemas.Remove(key); } } } }

Agréguelo a services.AddSwaggerGen :

 cfg.DocumentFilter<SwaggerODataControllerDocumentFilter>();

Para la opción n. ° 1, puede hacer lo siguiente:

 public class RemoveMetadataControllerFeatureProvider : ControllerFeatureProvider { protected override bool IsController(TypeInfo typeInfo) { if (typeInfo.FullName == "Microsoft.AspNetCore.OData.Routing.Controllers.MetadataController") { // or just compare the name return false; } return base.IsController(typeInfo); } }

En el inicio.cs

 services.AddControllers() .ConfigureApplicationPartManager(manager => { manager.FeatureProviders.Remove(manager.FeatureProviders.OfType<ControllerFeatureProvider>().FirstOrDefault()); manager.FeatureProviders.Add(new RemoveMetadataControllerFeatureProvider()); }).AddOData(....)
over 4 years ago · Santiago Trujillo Denunciar

0

Recientemente me enfrenté a un problema similar. me sale la solucion

  • eliminando la inyección del servicio odata del archivo de inicio (porque swagger agrega automáticamente clases de metadatos si traté de inyectar odata desde el inicio)
  • degradar OData de 8.0.4 a 8.0.0
  • e implementar ODataQueryOptions dentro del controlador en lugar de EnableQuery actionfilter
  • usó ODataBuilder/OdataModelBuilder dentro del controlador en lugar del inicio. en mi caso es ODataBuilder

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda