0

在 ASP.NET Core - Web API 项目中

[ApiExplorerSettings(GroupName = "<group-name>")]在 ApiController 和属性中使用装饰[Route]我想参考上面的GroupName属性值。

另请注意,我确实[ApiVersion("<some-version>")]在同一个控制器上进行了进一步分类。

以下是一些示例来解释:

示例 1:

LeadController 上的属性:[ApiVersion("1.0"), ApiExplorerSettings(GroupName = "sales"), [Route("api/{groupName}/v{version:apiVersion}/leads"]

预期的翻译路线格式:/api/sales/v1/leads

AccountsController 上的属性:[ApiVersion("2.1"), ApiExplorerSettings(GroupName = "finance"), [Route("api/{groupName}/v{version:apiVersion}/accounts"]

预期的翻译路线格式:/api/finance/v2.1/leads

上面{version:apiVersion}给了我ApiVersion价值(我假设是因为该属性已将 ToString 设置为版本值)。但是当我尝试{groupName}or{grp:groupName}{grp:ApiExplorerSettings.GroupName}- 它们都不起作用。如何在路由属性中访问该组名?

4

2 回答 2

1

您在其他地方是否有任何特殊设置,它在我这边工作正常。

领导控制器:

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

帐户控制器:

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

结果:

在此处输入图像描述

于 2020-08-21T02:43:21.943 回答
0

ApiExplorerSettings.GroupName适用于 API 描述中使用的逻辑组名称。它不在路由模板中使用或评估。没有办法让它发挥作用。这就是为什么它永远不会扩展。可以使用{groupName}路由参数,但它只是 - 路由参数。

如果您尝试控制 API Explorer 的分组或使用路由参数,则尚不完全清楚。API Explorer 通常使用分组。API 版本控制将分配或覆盖组名称,以便 API 按其版本进行分桶。可以更改此行为,但您需要 API Explorer(通过IApiDescriptionProvider)或 OpenAPI/Swagger 文档生成器扩展来执行此操作。

于 2020-09-16T21:05:38.360 回答