如何检索我的api的所有已实现版本的列表?

时间:2019-06-06 13:51:41

标签: asp.net-web-api asp.net-web-api2 api-versioning aspnet-api-versioning

我在我的WebApi项目中使用aspnet-api-versioning,它工作正常。版本不是硬编码的,它们是从名称空间检索的。

现在,我想检索已实施版本的列表。我想创建一些端点(让我们将其称为 GetApiVersions ),用户可以调用该端点来检索现有api版本号的简单集合,例如[1,2,3]。

在负责根据检索到的请求(CurrentImplementationApiVersionSelectorSelectVersion方法)选择正确的api版本的代码中,具有ApiVersionModel属性的ImplementedApiVersions参数。

ImplementedApiVersions属性似乎正是我所需要的,但是我不知道如何在我的 GetApiVersions 端点中访问它。有没有办法找回它?还是有其他方法可以以编程方式检索已实现的api版本列表?

2 个答案:

答案 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);
    }