ASP.NET Core Web API部署到AWS Elastic Beanstalk返回404 Not Found求助
问题排查与解决方案
核心问题定位
- Swagger仅开发环境启用:你当前
Startup.cs的Configure方法中,UseSwagger与UseSwaggerUI中间件完全包裹在if (env.IsDevelopment())判断分支内,AWS Elastic Beanstalk默认将ASPNETCORE_ENVIRONMENT环境变量设为Production,因此生产环境不会加载Swagger相关中间件,访问/swagger路径直接返回404。 - launchSettings.json仅本地生效:该文件是Visual Studio/本地开发时的配置文件,部署到服务器后完全不会读取,你在文件中配置的环境变量、启动地址、默认跳转路径都不会在生产环境生效。
- 根路径无默认路由:你当前没有配置根路径的处理逻辑,直接访问域名根地址也会返回404。
解决步骤
先验证服务本身是否正常
不要访问根路径或/swagger,直接调用你实际开发的业务接口完整路径,例如http://你的域名/api/[ControllerName],如果接口能正常返回数据,说明服务部署本身没有问题,只是Swagger和默认路由的配置问题。配置生产环境可用Swagger(可选)
如果需要生产环境也可以访问Swagger页面,有两种可选方案:
- 方案1:将Swagger中间件移出开发环境判断,修改
Configure方法代码:
// 先注册Swagger中间件,不再限制仅开发环境可用 app.UseSwagger(); app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "TodoApi v1")); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); }
- 方案2:在Elastic Beanstalk控制台手动设置环境变量:
进入你的Elastic Beanstalk环境 → 配置 → 软件 → 环境属性,新增配置项:ASPNETCORE_ENVIRONMENT=Development,保存后环境会自动重启,重启后即可正常访问Swagger页面。
- 配置根路径默认跳转(可选)
如果需要访问根路径自动跳转到Swagger页面,可添加重定向中间件:
首先引用命名空间using Microsoft.AspNetCore.Rewrite;,之后在Configure方法开头添加如下代码:
app.UseRewriter(new RewriteOptions() .AddRedirect("^$", "swagger"));
- 检查生产环境配置项
进入Elastic Beanstalk环境的环境属性配置页,确认你代码中用到的所有配置项都已正确配置,包括:
JWT:ValidAudienceJWT:ValidIssuerJWT:Secret
避免服务启动时因为缺失配置项抛出异常,导致请求返回404。
- 端口监听配置(可选)
如果按照上述步骤操作后仍然返回404,可在项目根目录新增web.config文件,配置IIS反向代理规则:
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="dotnet" arguments=".\ShopApiNet5.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" /> </system.webServer> </configuration>
重新打包部署即可。
内容的提问来源于stack exchange,提问作者Sergey Mkrtumyan
相关产品推荐
相关产品推荐

