Edge浏览器Blazor长文件上传报CORS错误,已配置CorsPolicy仍失效问询
问题根因说明
你遇到的CORS报错是表象错误,并非CORS配置本身有问题:当后端请求超时、中途断开连接或抛出未捕获异常时,ASP.NET Core不会给异常响应附加CORS头,浏览器就会抛出你看到的CORS拦截错误,真实原因是请求在4~5分钟时被中间节点断开了。
遗漏的配置/处理逻辑
Azure App Service负载均衡超时未修改
Azure App Service默认的HTTP请求超时为230秒(约3分50秒),刚好和你报错的时间吻合。仅修改HttpContext超时不生效,需要额外修改平台层面的超时配置:- 登录Azure门户,进入对应App Service的「配置」-「常规设置」
- 将「请求超时」设置为1800秒(对应30分钟)
- 也可以在项目的
web.config中添加配置:
<system.webServer> <aspNetCore requestTimeout="00:30:00" ... /> </system.webServer>HttpClient默认超时未调整
.NET自带的HttpClient默认请求超时为100秒,你没有手动修改客户端超时配置,会导致客户端先于服务端断开请求。需要在注入HttpClient时指定超时:builder.Services.AddHttpClient("UploadClient", client => { client.Timeout = TimeSpan.FromMinutes(30); });长同步请求架构不合理
超过几分钟的HTTP同步请求非常容易被代理、CDN、浏览器等任意中间节点断开,即使调整了所有超时配置也存在稳定性风险。建议改造为异步任务架构:- 文件上传成功后立即返回唯一的任务ID,后端用
IHostedService或Hangfire等后台任务组件异步处理文件导入逻辑 - 前端通过轮询接口或者SignalR实时获取任务进度、最终结果,完全避免长连接超时问题
- 文件上传成功后立即返回唯一的任务ID,后端用
异常响应无CORS头的兜底处理
可以在ASP.NET Core中添加异常中间件,给所有异常响应统一附加CORS头,避免真实错误被CORS报错掩盖:app.Use(async (context, next) => { try { await next(); } catch (Exception ex) { // 处理异常逻辑 context.Response.Headers.Add("Access-Control-Allow-Origin", "*"); // 其他CORS头按需添加 } });
内容的提问来源于stack exchange,提问作者kurabdurbos
相关产品推荐
相关产品推荐

