调用ASP.NET Core WebAPI登录端点时遇CORS预检请求头错误
解决方案
你的错误核心是:当请求携带凭据(withCredentials: true)时,CORS响应的Access-Control-Allow-Origin不能是通配符*,必须指定具体的源。下面是排查和解决步骤:
1. 修正CORS策略的注册方式
建议在服务注册阶段明确命名CORS策略,避免配置失效:
修改Program.cs中服务注册部分的AddCors代码:
services.AddCors(options => { options.AddPolicy("AllowTrustedOrigins", policy => { policy.WithOrigins( "http://localhost:8100", "https://myAPP.azurewebsites.net", "https://API1.azurewebsites.net", "https://API2.azurewebsites.net", "https://www.myDomain.de" ) .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials(); }); });
然后在中间件部分引用这个策略:
// 替换原来的app.UseCors(...)代码 app.UseCors("AllowTrustedOrigins");
2. 确认中间件顺序正确
确保UseCors的位置符合ASP.NET Core的中间件执行顺序要求:
app.UseHttpsRedirection(); app.UseSwagger(); app.UseSwaggerUI(x => x.SwaggerEndpoint("/swagger/v1/swagger.json", ".NET Sign-up and Verification API")); // UseCors必须放在UseMiddleware和MapControllers之前 app.UseCors("AllowTrustedOrigins"); app.UseMiddleware<ErrorHandlerMiddleware>(); app.UseMiddleware<JwtMiddleware>(); app.MapControllers();
3. 检查Azure App Service的CORS配置
这是最容易被忽略的点:如果你的API部署在Azure App Service,门户中的CORS设置会覆盖代码中的配置。
- 登录Azure门户,找到你的API应用
- 进入CORS设置页面
- 取消勾选"允许所有来源"(不要设置
*) - 手动添加你需要允许的源(和代码里的一致)
- 保存设置后重启API应用
4. 验证预检请求响应
用浏览器开发者工具(F12)查看OPTIONS请求的响应头:
- 确认
Access-Control-Allow-Origin是你的前端域名(比如https://myAPP.azurewebsites.net) - 确认
Access-Control-Allow-Credentials为true
如果响应头还是*,说明配置未生效,优先检查Azure的CORS设置是否覆盖了代码配置。
额外注意
- 去掉不必要的
SetIsOriginAllowedToAllowWildcardSubdomains(),你的源都是具体域名,不需要通配符子域名支持 - 修复
Program.cs中的笔误:builder.Services.Configure<MailSettings(builder.Configuration.GetSection(nameof(MailSettings)));应改为builder.Services.Configure<MailSettings>(builder.Configuration.GetSection(nameof(MailSettings)));,避免其他潜在问题
内容的提问来源于stack exchange,提问作者Dennis Bahl
相关产品推荐
相关产品推荐

