我正在尝试使用 Microsoft.AspNetCore.OData v8.0.1 通过 .NET 5 中的请求标头进行版本控制,并使用 SwaggerUI 进行版本控制。
v8之前,你曾经可以使用
services.AddODataApiExplorer(...);
这将为 Startup 的配置方法启用 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 似乎无法立即处理此问题,并且我能找到的有关版本控制的最佳文档仅处理 URL 段并提示查询字符串版本控制。如果可以的话,我更愿意在 URL 中保存字符,这就是为什么我想要使用请求标头版本控制。
而不是使用
services.AddODataApiExplorer(...);
你可以使用
services.AddApiVersioning(...);
(目前)它不会被 SwaggerUI 正确拾取,但它将正确生成客户端代码并通过路由到目标版本控制控制器来响应版本控制。
我能够在文章 REST API versioning with ASP.NET Core中找到有关版本控制的最清晰、简洁的文档。
版本控制时:查询字符串、标题或媒体类型
endpoints.MapVersionedODataRoute( "odata", "api", modelBuilder );
版本控制时:url 段
endpoints.MapVersionedODataRoute( "odata-bypath", "api/v{version:apiVersion}", modelBuilder );