Files
SVSimServer/SVSim.EmulatedEntrypoint/Conventions/SwaggerDefinitionConvention.cs
2025-05-18 02:27:17 -04:00

26 lines
962 B
C#

using Microsoft.AspNetCore.Mvc.ApplicationModels;
namespace SVSim.EmulatedEntrypoint.Conventions;
/// <summary>
/// Ensures controllers go to the correct swagger definition.
/// </summary>
public class SwaggerDefinitionConvention : IControllerModelConvention
{
/// <inheritdoc/>
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]";
}
}
}
}