问题描述
在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";
}
}
结果:
, ApiExplorerSettings.GroupName
仅 用于API说明中使用的逻辑组名称。在路由模板中不使用或评估它。没有办法使它起作用。这就是为什么它永远不会扩大。可以使用{groupName}
路由参数,但这仅是-路由参数。
如果您要控制API Explorer的分组或使用route参数,还不清楚。分组通常由API资源管理器使用。 API版本控制将分配或覆盖组名,以便按其版本存储API。可以更改此行为,但是您需要一个API Explorer(通过 IApiDescriptionProvider )或OpenAPI / Swagger文档生成器扩展来实现。