ASP.NET Core Web API CORS异常:源不匹配与多值错误排查
ASP.NET Core Web API CORS 错误排查与解决
问题情况
我在Windows服务器部署了ASP.NET Core Web API,服务器IP已绑定到https://api.example.com,直接访问https://api.example.com/api/test能正常返回数据,但配置CORS后遇到了问题。
当前使用的CORS代码
builder.Services.AddCors(options => options.AddDefaultPolicy( policy => policy .WithOrigins("https://www.example.com.tr") .AllowAnyHeader() .AllowAnyMethod() )); app.UseCors();
触发的错误提示
从源
https://example.com访问https://api.example.com/api/test被CORS策略阻止:预检请求的响应未通过访问控制检查:Access-Control-Allow-Origin头的值为http://www.example.com,与提供的源不匹配。
后来我把CORS源改成https://example.com.tr,又出现了多值错误,错误提示和上面一致。另外,我还在Web API的web.config中添加了这段配置:
<httpProtocol> <customHeaders> <add name="Access-Control-Allow-Headers" value="*" /> <add name="Access-Control-Allow-Methods" value="*" /> </customHeaders> </httpProtocol>
解决步骤
- 移除重复配置:
web.config里的自定义CORS头和代码层面的CORS配置存在冲突,会导致响应头出现重复字段,引发多值错误。直接删掉web.config中<httpProtocol>下的CORS相关配置,仅保留代码里的CORS设置即可。 - 匹配真实请求源:错误信息明确显示前端实际发起请求的源是
https://example.com,但你之前配置的是.com.tr后缀的域名,完全不匹配。先确认前端的真实请求域名,若确实是https://example.com,修改代码中的源配置:
builder.Services.AddCors(options => options.AddDefaultPolicy( policy => policy .WithOrigins("https://example.com") // 替换为实际请求的源 .AllowAnyHeader() .AllowAnyMethod() )); app.UseCors();
注意:WithOrigins中的源必须和前端完全一致,包括协议(https/http)、域名、端口(若有),不能有任何差异。
3. 排查协议一致性:错误里提到返回的Access-Control-Allow-Origin是http://www.example.com(http协议),但你的API和前端都是https,检查服务器或反向代理是否存在将https转为http的配置,导致CORS头协议错误。
4. 确认中间件顺序:app.UseCors()必须放在app.UseRouting()之后、app.UseAuthorization()之前,中间件顺序错误会导致CORS规则不生效。
内容的提问来源于stack exchange,提问作者fako
相关产品推荐
相关产品推荐

