OData v8 - 请求头版本控制

问题描述

我正在尝试使用 Microsoft.AspNetCore.OData v8.0.1 和版本控制通过 .NET 5 中的请求标头使版本控制与 SwaggerUI 一起工作。

v8 之前,你曾经可以使用

services.AddODataApiExplorer(...);

这将为 Startup 的 Configure 方法启用 DependencyInjection:

public void Configure(IApplicationBuilder app,IWebHostEnvironment env,IApiVersionDescriptionProvider provider) {
    ...
    app.UseSwagger();

    app.UseSwaggerUI(options => {
        // build a swagger endpoint for each discovered API version
        foreach (var description in provider.ApiVersionDescriptions) {
                    
            options.SwaggerEndpoint($"/swagger/{description.GroupName}/swagger.json",description.GroupName.toupperInvariant());
        }
        options.ShowExtensions();
    });
    ...
}

OData8 似乎没有立即处理这个问题,best documentation I can find on versioning 只处理 URL 段和查询字符串版本的提示。如果可以,我更愿意在 URL 中保存字符,这就是为什么我要使用请求标头版本控制。

感谢任何指导。

解决方法

所以,而不是使用

services.AddODataApiExplorer(...);

你可以使用

services.AddApiVersioning(...);

它(当前)不会被 SwaggerUI 正确接收,但它会正确生成客户端代码并通过路由到目标版本控制器来响应版本控制。

我能够在文章“REST API versioning with ASP.NET Core”中找到关于版本控制的最清晰简洁的文档