生产环境下配置Angular Azure Static Web App连接外部.NET Web API(无Azure Function Proxy)遇405错误
排查Azure Static Web App调用.NET Web API 405错误的解决方案
核心问题说明
405错误意味着请求方法不被目标服务器允许,但你本地代理能正常运行,说明问题出在Azure静态Web App的生产环境配置上——注意:angular.json里的代理配置只在本地开发环境生效,部署到Azure后完全不生效,必须用Azure专属的路由规则来配置转发。
具体排查与解决步骤
1. 用Azure静态Web App路由规则替换Angular代理
在项目根目录创建staticwebapp.config.json文件,这是Azure静态Web App的专属配置文件,用来处理路由和代理:
{ "routes": [ { "route": "/api/*", "rewrite": "/api/{*}", "allowedMethods": ["GET", "POST", "PUT", "DELETE", "OPTIONS"], "backend": { "url": "https://xxxxxx.azurewebsites.net/api/{*}" } } ], "globalHeaders": { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS", "Access-Control-Allow-Headers": "Content-Type, Authorization" } }
allowedMethods要包含你调用API用到的所有HTTP方法,别漏了OPTIONS(预检请求会用到)backend.url要和你的API服务器地址完全匹配,{*}是路径占位符,用来匹配/api后的所有子路径
2. 检查后端.NET Web API的CORS配置
即使Azure配置了跨域头,后端API也必须正确启用CORS才能接收请求:
在.NET项目的Program.cs中添加以下代码:
builder.Services.AddCors(options => { options.AddPolicy("AzureStaticAppCors", policy => { policy.WithOrigins("https://你的静态Web App地址.azurestaticapps.net") .AllowAnyMethod() .AllowAnyHeader(); }); }); // 注意要放在UseRouting之后,UseAuthorization之前 app.UseCors("AzureStaticAppCors");
- 替换成你自己的Azure静态Web App实际地址,生产环境别用
AllowAnyOrigin(),指定具体来源更安全
3. 验证后端API的路由与请求方法匹配
- 检查后端控制器的路由特性,比如前端请求
/api/users,后端控制器是否有[Route("api/[controller]")]标注 - 确认对应接口的HTTP方法特性正确,比如POST请求对应
[HttpPost],别写错成[HttpGet]
4. 检查Azure Web App的HTTP限制
登录Azure门户,找到你的.NET Web App:
- 进入配置 > 常规设置,确认HTTP版本设置为
2.0或更高 - 检查是否有应用服务防火墙(WAF)规则拦截了特定HTTP方法,必要时暂时关闭测试
5. 测试OPTIONS预检请求
405错误常伴随OPTIONS预检请求失败,用Postman直接请求你的API地址:
OPTIONS https://xxxxxx.azurewebsites.net/api/你的接口路径
如果返回405,说明后端没处理OPTIONS请求,在Program.cs中添加中间件处理:
app.Use(async (context, next) => { if (context.Request.Method == "OPTIONS") { context.Response.StatusCode = StatusCodes.Status200OK; await context.Response.WriteAsync(string.Empty); return; } await next(); });
内容的提问来源于stack exchange,提问作者Lluthus
相关产品推荐
相关产品推荐

