как pnet core добавить атрибут RouteAttribute по умолчанию, но swagger не работает - PullRequest
0 голосов
/ 30 марта 2020

Я хочу добавить атрибут 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;
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...