.NET 6+Angular本地CORS正常,IIS部署后CORS规则失效求助
解决IIS部署后.NET 6 CORS策略失效问题
1. 先查IIS原生CORS模块有没有启用
打开IIS管理器,找到你的站点,看功能视图里有没有「CORS」模块。要是开着,它会优先于.NET的CORS中间件处理请求,你在.NET里配的策略根本不会生效。
- 禁用方式:右键站点 → 功能视图 → 找到「CORS」→ 点击禁用;或者直接删站点
web.config里的CORS相关配置节点。
2. 确认.NET 6的CORS中间件加载顺序没搞错
在Program.cs里,CORS中间件必须放在路由中间件之前,而且如果用了静态文件,得放在静态文件中间件之后,给你个示例代码参考:
var builder = WebApplication.CreateBuilder(args); // 注册CORS服务 builder.Services.AddCors(options => { options.AddPolicy("MyCorsPolicy", policy => { policy.WithOrigins("https://你的允许域名.com") .WithMethods("GET", "POST") // 明确指定允许的请求方法 .AllowCredentials(); }); }); builder.Services.AddControllers(); var app = builder.Build(); // 先开静态文件(如果用到的话) app.UseStaticFiles(); // 然后启用CORS,这步必须在UseRouting之前 app.UseCors("MyCorsPolicy"); app.UseRouting(); app.UseAuthorization(); app.MapControllers(); app.Run();
3. 检查web.config里有没有冲突配置
打开站点根目录的web.config,看看<httpProtocol>节点下有没有手动加的Access-Control-Allow-Origin头,要是有,会直接覆盖.NET的配置,把这类配置删掉:
<httpProtocol> <customHeaders> <!-- 删掉下面这种自定义的CORS头 --> <!-- <add name="Access-Control-Allow-Origin" value="*" /> --> </customHeaders> </httpProtocol>
4. 用浏览器工具验证响应头
按F12打开浏览器开发者工具,看请求的响应头,确认Access-Control-Allow-Origin是不是你在.NET里配的指定域名,而不是*或者其他奇怪的值。要是看到*,说明IIS某个模块在自动加这个头,回头查前面1、3步骤。
5. 检查IIS应用池设置
把应用池的**.NET CLR版本**设为「无托管代码」,因为.NET 6是独立部署的,不需要IIS托管,不然托管模块会干扰CORS策略。
内容的提问来源于stack exchange,提问作者frederic langlois
相关产品推荐
相关产品推荐

