Core 3.1 API中的全局路由前缀

时间:2020-06-12 19:58:20

标签: asp.net-core-3.1

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

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

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

1 个答案:

答案 0 :(得分:0)

您应该能够创建实现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精确测试您的路由,但在我的应用程序中使用更简单的路由时,效果很好。