.NET 7.0 + OData 8.0 API版本信息未在Swagger中显示的问题咨询
OData API版本控制配置问题
我已在项目中集成OData并完成多场景测试,为OData添加API版本控制时曾遇阻碍,最终完成配置。目前可通过带版本号的端点正常调用接口,但版本信息未在Swagger中展示。
相关配置代码
var modelBuilder = new ODataConventionModelBuilder(); modelBuilder.EntityType<Order>(); modelBuilder.EntitySet<Customer>("Customers"); builder.Services.AddControllers().AddOData( options => options.Select().Filter().OrderBy().Expand().Count().SetMaxTop(null).AddRouteComponents( "api/v{version:apiVersion}/", modelBuilder.GetEdmModel())); builder.Services.AddApiVersioning(opt => { opt.DefaultApiVersion = new Microsoft.AspNetCore.Mvc.ApiVersion(1, 0); opt.AssumeDefaultVersionWhenUnspecified = true; opt.ReportApiVersions = true; opt.ApiVersionReader = ApiVersionReader.Combine(new UrlSegmentApiVersionReader(), new HeaderApiVersionReader("x-api-version"), new MediaTypeApiVersionReader("x-api-version")); }); builder.Services.AddVersionedApiExplorer(setup => { setup.GroupNameFormat = "'v'VVV"; setup.SubstituteApiVersionInUrl = true; });
控制器代码
namespace Aimtec.DataIntegrator.WebApi.Controllers.v1 { [ApiVersion("1.0")] public class CustomersController : ODataController { private static Random random = new Random(); private static List<Customer> customers = new List<Customer>( Enumerable.Range(1, 3).Select(idx => new Customer { Id = idx, Name = $"Customer {idx}", Orders = new List<Order>( Enumerable.Range(1, 2).Select(dx => new Order { Id = (idx - 1) * 2 + dx, Amount = random.Next(1, 9) * 10 })) })); [EnableQuery] public ActionResult Get() { return Ok(customers); } } }
相关截图
- OData路由调试截图:

- Swagger截图:

疑问
是否有通用的OData版本控制配置指南?
内容的提问来源于stack exchange,提问作者pietro
相关产品推荐
相关产品推荐

