如何在集成测试中以编程方式获取ASP.NET Core的API版本号?
你可以直接从WebApplicationFactory暴露的依赖注入容器中获取IApiVersionDescriptionProvider服务,该服务由你注册的AddVersionedApiExplorer方法自动注册,包含了项目中所有定义的API版本信息。
实现步骤
- 从工厂的服务容器中获取版本描述提供器:
// 开启服务作用域避免生命周期问题 using var scope = _factory.Services.CreateScope(); var versionProvider = scope.ServiceProvider.GetRequiredService<IApiVersionDescriptionProvider>(); // 按需获取对应的版本号,GroupName就是你配置的格式化后带v前缀的版本字符串 // 示例:取第一个定义的版本 var version = versionProvider.ApiVersionDescriptions.First().GroupName; // 示例:取最新版本 // var version = versionProvider.ApiVersionDescriptions.Last().GroupName;
- 替换原来硬编码的version变量即可:
var controller = nameof(CustomerController).Replace("Controller", ""); var action = nameof(CustomerController.SignIn); var route = $"/api/{version}/{controller}/{action}"; var client = _factory.CreateClient(); var response = await client.GetAsync(route);
注意:如果你的项目定义了多版本API,只需对
ApiVersionDescriptions集合做自定义筛选即可拿到目标版本,该集合内的每个元素的GroupName属性完全匹配你配置的'v'VVV格式,不需要额外做字符串转换。
测试项目需要提前引用和主项目版本一致的Microsoft.AspNetCore.Mvc.Versioning.ApiExplorerNuGet包。
内容的提问来源于stack exchange,提问作者lonix
相关产品推荐
相关产品推荐

