HttpRepl无法找到OpenAPI描述且ls命令无返回的原因与解决方案
问题原因
HttpRepl的ls目录浏览功能完全依赖Web API服务暴露的OpenAPI(即Swagger)规范文档,你收到的Unable to find an OpenAPI description报错已经明确了根因:你的ASP.NET Core项目没有启用OpenAPI中间件,工具无法拉取接口结构生成目录树,因此ls命令没有可展示的内容。你可以手动执行GET请求拿到响应是因为手动指定接口路径不需要依赖OpenAPI结构,和ls功能的实现逻辑不同,两者现象不冲突。
解决步骤
1. 正确安装Swagger NuGet包
你之前执行包安装命令失败是因为指定了错误的项目文件名,你当前在ContosoPizza项目根目录,不需要硬写WebAPI.csproj,直接执行以下命令即可:
dotnet add package Swashbuckle.AspNetCore -v 5.6.3
你使用的是.NET Core 3.1版本,对应适配Swashbuckle 5.x版本,无需升级到更高版本。
2. 配置Swagger中间件
打开项目的Startup.cs文件,做两处修改:
- 在
ConfigureServices方法中注册Swagger生成服务:
public void ConfigureServices(IServiceCollection services) { services.AddControllers(); // 新增以下代码 services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "ContosoPizza API", Version = "v1" }); }); }
- 在
Configure方法中启用Swagger中间件,注意要放在开发环境判断的代码块内:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); // 新增以下两行代码 app.UseSwagger(); app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "ContosoPizza API v1")); } app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
3. 重启项目验证
修改完成后重新运行你的Web API项目,再用HttpRepl连接http://localhost:5000,不会再报找不到OpenAPI描述的错误,执行ls命令即可正常展示所有接口目录。
内容的提问来源于stack exchange,提问作者Nuse
相关产品推荐
相关产品推荐

