Core 3.1 中的全局路由前缀 API

Global routing prefix in Core 3.1 API

我在每个控制器上都有属性 [Route("api/v{version:apiVersion}/[controller]")],这是多余的。

有没有办法在某个地方全局设置 api/v{version:apiVersion}/ 部分,这样我就可以指定控制器应该是什么?

我试过使用基本控制器、MapControllerRoute 和 UsePathBase。

您应该能够创建一个实现 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 准确测试你的路线,但它在我的应用程序中与更简单的路线一起工作得很好。