ASP.NET Core 8 Web API版本控制配置:服务无法解析
解决方案
1. 确认安装正确的NuGet包
确保项目已安装以下两个包:
Asp.Versioning.Mvc(核心API版本控制包)Asp.Versioning.Mvc.ApiExplorer(用于Swagger集成的API Explorer扩展)
可通过NuGet包管理器安装,或使用命令行:
Install-Package Asp.Versioning.Mvc Install-Package Asp.Versioning.Mvc.ApiExplorer
2. 修改API版本控制配置代码
在.NET 8中,AddVersionedApiExplorer已不再是顶级扩展方法,而是整合到AddApiVersioning的链式调用中。将原有配置修改为:
services.AddApiVersioning(options => { options.DefaultApiVersion = new ApiVersion(1, 0); options.AssumeDefaultVersionWhenUnspecified = true; options.ReportApiVersions = true; }) // 链式调用AddApiExplorer配置版本化API Explorer .AddApiExplorer(options => { options.GroupNameFormat = "'v'VVV"; options.SubstituteApiVersionInUrl = true; });
这段代码会自动注册IApiVersionDescriptionProvider服务,解决依赖注入失败的问题。
3. 确认命名空间引用
在ConfigureSwaggerOptions类所在文件中,确保引用正确的命名空间:
using Asp.Versioning.ApiExplorer; using Microsoft.Extensions.Options; using Microsoft.OpenApi.Models; using Swashbuckle.AspNetCore.SwaggerGen;
4. 注册Swagger配置类
在Program.cs中注册ConfigureSwaggerOptions:
services.ConfigureOptions<ConfigureSwaggerOptions>();
5. 验证Swagger中间件配置
确保Swagger中间件正确读取版本信息:
app.UseSwagger(); app.UseSwaggerUI(options => { var apiVersionDescriptionProvider = app.Services.GetRequiredService<IApiVersionDescriptionProvider>(); foreach (var description in apiVersionDescriptionProvider.ApiVersionDescriptions) { options.SwaggerEndpoint( $"/swagger/{description.GroupName}/swagger.json", $"Test API {description.GroupName}"); } });
内容的提问来源于stack exchange,提问作者Enrico
相关产品推荐
相关产品推荐

