using Microsoft.AspNetCore.Mvc.ApplicationModels; namespace SVSim.EmulatedEntrypoint.Conventions; /// /// Ensures controllers go to the correct swagger definition. /// public class SwaggerDefinitionConvention : IControllerModelConvention { /// public void Apply(ControllerModel controller) { var controllerNamespace = controller.ControllerType.Namespace; // eg. Controllers.V1 var swaggerDefinition = controllerNamespace.Split('.').Last().ToLower(); const string defaultRoute = "api/[controller]"; controller.ApiExplorer.GroupName = swaggerDefinition; foreach (SelectorModel selector in controller.Selectors) { if (selector.AttributeRouteModel != null && selector.AttributeRouteModel.Template == defaultRoute) { selector.AttributeRouteModel.Template = $"api/{swaggerDefinition}/[controller]"; } } } }