.NET Core 5.0 WebAPI跨域调用出现CORS错误该如何解决?
.NET Core 5.0 WebAPI CORS错误解决方案
问题核心原因排查与修复
- 修复前端Ajax请求代码
前端请求头中不能添加Access-Control-Allow-Origin字段,该字段属于服务端响应头,前端主动添加会被识别为自定义请求头,触发CORS预检规则校验失败,直接删除该行即可:
$.ajax({ async: true, url: "https://localhost:44385/AuctionDetails/GetAllAuctions", type: "GET", crossDomain: true, dataType: "JSON", headers: { "Authorization": 'Bearer ' + '@Session["USRT_TOKEN"]' // 删除Access-Control-Allow-Origin配置行 }, // 剩余业务代码保持不变 });- 修复前端Ajax请求代码
- 补全后端CORS服务配置
你当前的CORS配置仅开放了源访问权限,未开放请求头和请求方法的访问权限,你的请求携带了自定义Authorization头,需要额外配置允许任意头和任意方法:
public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); services.AddCors(options => options.AddDefaultPolicy( builder => builder.AllowAnyOrigin() .AllowAnyHeader() // 新增:允许所有请求头 .AllowAnyMethod() // 新增:允许所有请求方法 )); services.AddControllers(); }如果后续接口需要支持Cookie凭证传递,需将
AllowAnyOrigin()替换为WithOrigins("https://localhost:44341"),并追加AllowCredentials()配置。- 补全后端CORS服务配置
- 确认中间件管道顺序严格正确
UseCors必须放置在UseRouting之后,UseAuthentication、UseAuthorization之前,完整顺序参考:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); // CORS中间件必须放在此处 app.UseCors(); app.UseAuthentication(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); endpoints.MapControllers(); }); }- 确认中间件管道顺序严格正确
- 异常场景排查
如果接口返回非200状态码(比如401、500),错误处理中间件可能会清空响应头导致CORS头丢失,需确保错误处理中间件放置在UseCors之后,或者自定义异常返回逻辑时保留CORS相关响应头。
- 异常场景排查
内容的提问来源于stack exchange,提问作者Hardik Vyas
相关产品推荐
相关产品推荐

