.NET Core 6 Web API配置任意源CORS失败问题求助
.NET Core 6 CORS允许任意源报错的原因及解决办法
核心原因
浏览器的CORS安全规范明确规定:当请求包含凭证(如Cookie、HTTP认证信息)时,服务器不能将Access-Control-Allow-Origin设置为通配符*。
你配置的AllowAnyOrigin()本质就是返回*,再加上AllowCredentials(),完全违反了这个规范,所以浏览器会直接拦截响应,导致你看到的"没有Access-Control-Allow-Origin头"的错误(实际是浏览器因为规范冲突直接屏蔽了响应)。而用WithOrigins("http://localhost")时,服务器返回的是具体的源地址,符合带凭证的要求,所以能正常运行。
解决方案
根据你的需求分两种情况处理:
情况1:不需要携带凭证(Cookie/认证信息)
直接移除AllowCredentials(),保留AllowAnyOrigin()即可:
builder.Services.AddCors(options => { options.AddPolicy(name: "any", policy => { policy .AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); }); });
情况2:必须携带凭证
不能再用AllowAnyOrigin(),改用SetIsOriginAllowed(_ => true),它会动态将请求的Origin作为Access-Control-Allow-Origin的值返回(而非*),同时配合AllowCredentials()就符合规范了:
builder.Services.AddCors(options => { options.AddPolicy(name: "any", policy => { policy .SetIsOriginAllowed(_ => true) .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials(); }); });
额外注意
确保app.UseCors()的中间件顺序正确:要放在app.UseRouting()之后,app.UseAuthorization()之前,否则CORS策略可能不生效。
内容的提问来源于stack exchange,提问作者Hovi906
相关产品推荐
相关产品推荐

