Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

848
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda