如何将ASP.NET Core API应用部署到Azure及部署后无法正常访问API问题
问题根因
你当前的Configure方法存在多处核心中间件缺失和配置限制,直接导致部署后无法正常处理请求:
- 未注册路由、端点映射等必备中间件,请求无法匹配到Controller对应的API接口,仅能返回默认JSON响应
- Swagger相关配置仅在开发环境生效,部署到生产环境后默认无法访问接口调试页面
- 静态文件、默认页中间件未注册,若项目包含前端资源也无法正常加载
- CORS配置仅允许本地
http://localhost:4200的跨域请求,部署后前端域名不一致时接口请求会被拦截
修复代码
替换你的Configure方法为以下内容,根据实际部署场景调整配置:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 跨域配置需放在请求处理链路最前端 app.UseCors(options => // 部署后请将生产环境前端域名添加到允许列表,测试阶段可临时用AllowAnyOrigin() options.WithOrigins("http://localhost:4200", "替换为你的生产环境前端访问地址") .AllowAnyMethod() .AllowAnyHeader()); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } // 若需要生产环境也能访问Swagger,将相关配置移到环境判断外 app.UseSwagger(); app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "CameraApp v1")); // 存在前端静态资源时需启用以下两个配置 app.UseDefaultFiles(); app.UseStaticFiles(); // 注册路由匹配中间件 app.UseRouting(); // 若使用身份认证,需在此处添加app.UseAuthentication(); app.UseAuthorization(); // 端点映射,绑定API接口路由 app.UseEndpoints(endpoints => { endpoints.MapControllers(); // SPA/Blazor项目需添加回退配置,例如:endpoints.MapFallbackToFile("index.html"); }); }
部署后验证项
- 检查部署环境的
ASPNETCORE_ENVIRONMENT变量配置,确认和你预期的运行环境一致 - 部署完成后访问
{部署域名}/swagger,确认接口调试页面可以正常打开,直接在Swagger中测试接口返回是否正常 - 若为前后端分离部署,确认CORS允许列表中已经添加了生产环境的前端域名,避免跨域拦截
内容的提问来源于stack exchange,提问作者Rizwan Malik
相关产品推荐
相关产品推荐

