You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Edge浏览器Blazor长文件上传报CORS错误,已配置CorsPolicy仍失效问询

问题根因说明

你遇到的CORS报错是表象错误,并非CORS配置本身有问题:当后端请求超时、中途断开连接或抛出未捕获异常时,ASP.NET Core不会给异常响应附加CORS头,浏览器就会抛出你看到的CORS拦截错误,真实原因是请求在4~5分钟时被中间节点断开了。

遗漏的配置/处理逻辑
  • Azure App Service负载均衡超时未修改
    Azure App Service默认的HTTP请求超时为230秒(约3分50秒),刚好和你报错的时间吻合。仅修改HttpContext超时不生效,需要额外修改平台层面的超时配置:

    1. 登录Azure门户,进入对应App Service的「配置」-「常规设置」
    2. 将「请求超时」设置为1800秒(对应30分钟)
    3. 也可以在项目的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、浏览器等任意中间节点断开,即使调整了所有超时配置也存在稳定性风险。建议改造为异步任务架构:

    1. 文件上传成功后立即返回唯一的任务ID,后端用IHostedService或Hangfire等后台任务组件异步处理文件导入逻辑
    2. 前端通过轮询接口或者SignalR实时获取任务进度、最终结果,完全避免长连接超时问题
  • 异常响应无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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 13:36:04