ASP.NET Web API部署Plesk后与React前端的CORS策略失效问题
针对部署Plesk后CORS失效的问题,按以下步骤排查修复:
确认ASP.NET Core CORS中间件顺序
CORS中间件必须放在app.UseRouting()之后、app.UseAuthorization()之前,顺序错误会导致配置完全不生效。正确配置示例:var builder = WebApplication.CreateBuilder(args); builder.Services.AddCors(options => { options.AddPolicy("FrontendOrigin", policy => policy.WithOrigins("https://doctor.echowhite.com") .AllowAnyHeader() .AllowAnyMethod() .AllowCredentials()); // 前端带认证信息时必须添加 }); builder.Services.AddControllers(); var app = builder.Build(); app.UseHttpsRedirection(); app.UseRouting(); app.UseCors("FrontendOrigin"); // 关键位置 app.UseAuthorization(); app.MapControllers(); app.Run();禁用Plesk自带的IIS CORS模块
Plesk的IIS环境可能自带CORS配置模块,会和ASP.NET Core的CORS设置冲突。进入Plesk网站管理面板,找到「HTTP响应头」或「CORS」设置项,禁用IIS层面的CORS配置,完全依赖ASP.NET Core的代码配置。检查Plesk反向代理/URL重写规则
如果Plesk配置了反向代理或URL重写,可能会修改或丢失请求的Origin头。在「URL重写」设置中添加规则保留该头:<rule name="Preserve Origin Header" stopProcessing="true"> <match url=".*" /> <action type="Rewrite" url="{REQUEST_URI}" /> <serverVariables> <set name="HTTP_ORIGIN" value="{HTTP_ORIGIN}" /> </serverVariables> </rule>验证请求的Origin头
用浏览器开发者工具(Network标签)查看前端请求的Origin字段,确认和配置的https://doctor.echowhite.com完全一致(注意是否带www、HTTP/HTTPS是否匹配),不一致则调整CORS配置的Origin值。检查HTTPS与证书有效性
确保API部署后使用HTTPS且SSL证书有效,前端HTTPS请求无法访问HTTP API,会触发CORS错误。同时确认Plesk中已开启强制HTTPS跳转。测试API响应头
用curl或Postman直接请求API,查看响应头是否包含Access-Control-Allow-Origin、Access-Control-Allow-Methods等CORS相关字段。如果没有,排查是否有全局过滤器、其他中间件覆盖了响应头。
内容的提问来源于stack exchange,提问作者Muhammad Ali

