在ASPNET Core的Route中使用ApiExplorerSettings GroupName

问题描述

在ASP.NET Core中-Web API项目

使用在ApiController上修饰过的[ApiExplorerSettings(GroupName = "<group-name>")] 并在[Route]属性值上方引用。

还请注意,我在同一控制器上确实有GroupName可以进一步分类

这里有一些样本可以解释:

示例1:

LeadController上的属性[ApiVersion("<some-version>")]

翻译后的预期路线格式:[ApiVersion("1.0"),ApiExplorerSettings(GroupName = "sales"),[Route("api/{groupName}/v{version:apiVersion}/leads"]

AccountsController上的属性/api/sales/v1/leads

翻译后的预期路线格式:[ApiVersion("2.1"),ApiExplorerSettings(GroupName = "finance"),[Route("api/{groupName}/v{version:apiVersion}/accounts"]

在上面的/api/finance/v2.1/leads中,我得到了{version:apiVersion}的值(我认为是因为该属性的ToString设置为版本值)。但是,当我尝试ApiVersion{groupName}{grp:groupName}时,它们都不起作用。如何在路由属性中访问此组名?

解决方法

您在其他地方是否有任何特殊设置,在我这方面效果很好。

LeadController:

[ApiVersion("1.0"),ApiExplorerSettings(GroupName = "sales"),Route("api/{groupName}/v{version:apiVersion}/leads")]
[ApiController]
public class LeadController : ControllerBase
{
    public string Get()
    {
        return "sales group";
    }
}

AccountsController:

[ApiVersion("2.1"),ApiExplorerSettings(GroupName = "finance"),Route("api/{groupName}/v{version:apiVersion}/accounts")]
[ApiController]
public class AccountsController : ControllerBase
{
    public string Get()
    {
        return "finance group";
    }
}

结果:

enter image description here

,

ApiExplorerSettings.GroupName 用于API说明中使用的逻辑组名称。在路由模板中使用或评估它。没有办法使它起作用。这就是为什么它永远不会扩大。可以使用{groupName}路由参数,但这仅是-路由参数。

如果您要控制API Explorer的分组或使用route参数,还不清楚。分组通常由API资源管理器使用。 API版本控制将分配或覆盖组名,以便按其版本存储API。可以更改此行为,但是您需要一个API Explorer(通过 IApiDescriptionProvider )或OpenAPI / Swagger文档生成器扩展来实现。