我在我的WebApi项目中使用aspnet-api-versioning,它工作正常。版本不是硬编码的,它们是从名称空间检索的。
现在,我想检索已实施版本的列表。我想创建一些端点(让我们将其称为 GetApiVersions ),用户可以调用该端点来检索现有api版本号的简单集合,例如[1,2,3]。
在负责根据检索到的请求(CurrentImplementationApiVersionSelector
,SelectVersion
方法)选择正确的api版本的代码中,具有ApiVersionModel
属性的ImplementedApiVersions
参数。
ImplementedApiVersions
属性似乎正是我所需要的,但是我不知道如何在我的 GetApiVersions 端点中访问它。有没有办法找回它?还是有其他方法可以以编程方式检索已实现的api版本列表?
答案 0 :(得分:0)
@Marta您的目标是什么?拥有API版本后,您打算如何处理它们?这将决定解决方案。
如果您要做的只是在请求中报告此信息,则此信息是内置的;您只需要打开它即可。
options.ReportApiVersions = true;
这将返回 api-supported-versions 和 api-deprecated-versions 标头。您可以在Version Discovery Wiki主题中看到此信息和更多信息。
您还可以在控制器中当前正在执行的操作上使用 GetApiVersionModel 扩展方法。再次-根据您在管道中的何时何地确定信息的检索方式。
我希望这可以帮助您入门。随时问更多问题。
答案 1 :(得分:0)
我无法访问ImplementedApiVersions
属性。我不得不想出一种解决方法。我创建了一个带有静态字段(List<string> ApiVersions
)的服务(称为ApiVersionService)。该服务允许注册和读取注册的版本。在使用摇头丸时,我在SwaggerConfig.cs
文件中注册了所有版本:
configuration.EnableSwagger(ApiDocConfiguration.RouteTemplate, swagger =>
{
swagger.MultipleApiVersions(
(apiDescription, version) => apiDescription.GetGroupName() == version,
info =>
{
foreach (var group in apiExplorer.ApiDescriptions)
{
apiVersionService.AddApiVersion(group.Name);
// some other code
}
});
});
简单的端点允许我检索所有版本:
[HttpGet]
[Route("versions")]
public IHttpActionResult GetVersions()
{
// apiVersionService returns the data stored in ApiVersions field
var versions = apiVersionService.GetApiVersions();
return Ok(versions);
}