Angular 5调用.NET Core 2.0 API在EDGE浏览器报0未知错误
解决Edge浏览器中Angular5调用.NET Core2.0 API的跨域错误
我来帮你搞定这个Edge特有的跨域问题!其他浏览器正常唯独Edge报错Http failure response for (unknown url): 0 Unknown Error,大概率是Edge在CORS预检请求处理、头信息兼容性上有特殊要求,结合你的场景给你几个排查方向:
1. 补全.NET Core的CORS配置(重点!)
你的配置代码被截断了,大概率是没加完整的允许规则。Edge对预检请求(OPTIONS)的校验比其他浏览器更严格,必须明确允许请求头、方法,必要时还要允许凭证:
services.AddCors(options => { options.AddPolicy("AllowAllOrigins", builder => { builder.AllowAnyOrigin() .AllowAnyHeader() // 必须加,否则预检请求的自定义头会被拦截 .AllowAnyMethod() // 允许所有HTTP方法 .AllowCredentials(); // 如果你的请求带Cookie、认证信息,必须加这个 }); });
注意中间件顺序:一定要在app.UseMvc()之前启用CORS,否则请求会先被Mvc处理,CORS规则不生效:
public void Configure(IApplicationBuilder app) { // 先启用CORS app.UseCors("AllowAllOrigins"); // 再启用Mvc app.UseMvc(); }
2. 检查预检请求(OPTIONS)的状态
打开Edge开发者工具(F12)切换到「网络」标签,重新触发请求,找对应的OPTIONS请求:
- 如果
OPTIONS请求返回404/500,说明.NET Core的路由或中间件拦截了这个请求,要确保API没有禁用OPTIONS方法,或者没有其他中间件(比如认证中间件)在CORS之前拦截了它。 - 如果
OPTIONS请求返回200,但响应头里没有Access-Control-*相关字段,说明CORS策略没正确生效,回到第一步检查配置和中间件顺序。
3. 排查Edge的特殊限制
- 凭证与通配符冲突:如果你的请求带了Cookie或认证信息,Edge不允许
Access-Control-Allow-Origin: *和AllowCredentials同时存在。这时候要把AllowAnyOrigin()改成指定具体的Angular应用地址:
同时Angular请求要开启builder.WithOrigins("http://localhost:4200") // 替换成你的Angular实际地址 .AllowAnyHeader() .AllowAnyMethod() .AllowCredentials();withCredentials:this.http.get(apiUrl, { withCredentials: true }); - Edge版本问题:如果是旧版Edge(非Chromium内核),可能存在CORS相关的已知bug,建议升级到Chromium版Edge试试,或者针对旧版调整请求头,比如避免使用一些Edge不兼容的自定义头。
4. 检查Angular请求的兼容性
确保Angular的Http请求没有使用Edge不支持的特性:
- 避免在URL中使用中文、空格等特殊字符,确保URL已正确编码。
- 如果用了
HttpClient的拦截器,检查是否添加了Edge无法识别的请求头。
内容的提问来源于stack exchange,提问作者Ranjit Krishnan
相关产品推荐
相关产品推荐

