【问题标题】:OData v8 - Request Header VersioningOData v8 - 请求标头版本控制
【发布时间】:2021-10-04 14:07:19
【问题描述】:

我正在尝试使用 Microsoft.AspNetCore.OData v8.0.1 通过 .NET 5 中的请求标头进行版本控制,并使用 SwaggerUI 进行版本控制。

Pre-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 中保存字符,这就是我想要使用请求标头版本控制的原因。

感谢任何指导。

【问题讨论】:

  • 您可以使用操作过滤器将标头参数添加到所有版本化操作。它会出现在招摇的用户界面中。这对你有用吗?
  • 像这样stackoverflow.com/questions/68101038/…,但作为标题,而不是查询参数。见标题Setting default parameters depending on version in Swagger UI

标签: c# asp.net-web-api swagger odata asp.net5


【解决方案1】:

所以,而不是使用

services.AddODataApiExplorer(...);

你可以使用

services.AddApiVersioning(...);

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

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

【讨论】:

    【解决方案2】:

    //WHEN VERSIONING BY:查询字符串、标题或媒体类型

      endpoints.MapVersionedODataRoute( "odata", "api", modelBuilder );
    

    //WHEN VERSIONING BY: url 段

    endpoints.MapVersionedODataRoute( "odata-bypath", "api/v{version:apiVersion}", modelBuilder );
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    相关资源
    最近更新 更多