ASP.NET Core项目VS2019启动正常,直接运行可执行文件访问Swagger报404
问题根因
你的Swagger相关中间件注册逻辑被限定在了**开发环境(Development)**下才会执行:从你提供的Configure方法代码可以看到,app.UseSwagger()和app.UseSwaggerUI()这两个核心注册逻辑,都写在if (env.IsDevelopment())的判断块内。
- 从VS2019启动时,VS会默认给程序设置宿主环境为
Development,判断块内逻辑正常执行,Swagger中间件加载成功,所以可以正常访问页面 - 直接运行Debug目录下的可执行文件时,ASP.NET Core默认宿主环境为
Production,不会进入判断块执行Swagger注册逻辑,所以访问swagger地址返回404。
解决方法
方法1:临时指定运行环境为开发模式(仅本地测试用)
在启动exe前,先在命令行设置环境变量,再启动程序即可:
set ASPNETCORE_ENVIRONMENT=Development WallyRest.exe
方法2:调整中间件注册逻辑,所有环境都开放Swagger
把Swagger相关注册代码从if (env.IsDevelopment())判断块中移出即可:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } // 移到判断外,所有环境都加载Swagger app.UseSwagger(); app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "WallyRest v1")); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
⚠️ 提示:如果是面向公网的正式生产环境,不建议开放Swagger页面,避免接口信息泄露。
内容的提问来源于stack exchange,提问作者Eric Ouellet
相关产品推荐
相关产品推荐

