Я хочу добавить атрибут RouteAttribute по умолчанию для всех контроллеров, например: «http://localhost: 5000 / cntm / default », api в порядке, но swagger не работает, он показывает «Внутренняя ошибка сервера» /swagger/v1/swagger.json ", если я не добавлю этот атрибут по умолчанию RouteAttribute, swagger работает отлично!
[Route("default")]
[ApiController]
public class DefaultController : ControllerBase
{
}
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers()
.AddMvcOptions(options =>
{
options.Conventions.Insert(0, new MAMRouteConvention(new RouteAttribute("cntm")));
});
}
public class MAMRouteConvention : IApplicationModelConvention
{
private readonly AttributeRouteModel _centralPrefix;
public MAMRouteConvention(IRouteTemplateProvider routeTemplateProvider)
{
_centralPrefix = new AttributeRouteModel(routeTemplateProvider);
}
public void Apply(ApplicationModel application)
{
foreach (var controller in application.Controllers)
{
var matchedSelectors = controller.Selectors.Where(x => x.AttributeRouteModel != null).ToList();
if (matchedSelectors.Any())
{
foreach (var selectorModel in matchedSelectors)
{
selectorModel.AttributeRouteModel =
AttributeRouteModel.CombineAttributeRouteModel(_centralPrefix, selectorModel.AttributeRouteModel);
}
}
var unmatchedSelectors = controller.Selectors.Where(x => x.AttributeRouteModel == null).ToList();
if (unmatchedSelectors.Any())
{
foreach (var selectorModel in unmatchedSelectors)
{
selectorModel.AttributeRouteModel = _centralPrefix;
}
}
}
}
}