Глобальный префикс маршрутизации в Core 3.1 API

У меня есть атрибут [Route("api/v{version:apiVersion}/[controller]")] на каждом контроллере, и это избыточно.

Есть ли способ установить часть api/v{version:apiVersion}/ где-то глобально, чтобы я мог просто указать, каким должен быть контроллер?

Я пробовал использовать базовый контроллер, MapControllerRoute и UsePathBase.


person user3953989    schedule 12.06.2020    source источник


Ответы (1)


Вы должны иметь возможность создать атрибут, реализующий IRouteTemplateProvider.

/// <summary>
/// Class to ensure that we use our default naming convension for controller routes
/// </summary>
public class DefaultRoutingAttribute : Attribute, IRouteTemplateProvider {
    public string Template => "api/v{version:apiVersion}/[controller]";
    /// <summary>
    /// Order is 2 to allow explicitly overriding the default route
    /// </summary>
    public int? Order => 2;
    public string Name { get; set; }
}

а затем используйте его как

[ApiController]
[DefaultRouting]
public class YourController : ControllerBase {}

Я не проверял именно ваш маршрут с помощью apiversion, но он хорошо работает с более простым маршрутом в моем приложении.

person Fredrik C    schedule 03.09.2020