Después de actualizar mi proyecto a .NET6 y OData a 8.0.4, apareció un nuevo controlador de metadatos con estos puntos finales:
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:
Hay varias opciones para solucionar esto:
MetadataControllerConventions en ODataOptions para quitar MetadataRoutingConvention .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(....)Recientemente me enfrenté a un problema similar. me sale la solucion