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

ASP.NET Core 3.1部署IIS 10文件上传静默失败求助

ASP.NET Core 3.1 Razor Pages 文件上传失败排查方案

核心问题复盘

ASP.NET Core 3.1 Razor Pages应用部署于IIS 10,DEV环境文件上传功能正常,但Staging环境下,即使远低于IIS默认28.6MB限制的文件(如4MB)也会上传失败,浏览器报net::ERR_CONNECTION_CLOSED;进一步测试发现不同大小的小文件会在不同上传进度中断(512KB在34%、325KB在54%等),使用Telerik MVC Upload组件。

排查方向与解决方案

1. 修正ASP.NET Core请求限制与超时配置

ASP.NET Core自身的请求大小和超时限制可能覆盖IIS设置,需明确配置:

  • 页面级配置:在上传对应的PageModel上添加特性
    [RequestSizeLimit(104857600)] // 允许100MB上传
    [RequestTimeout("00:05:00")] // 设置5分钟请求超时
    public class UploadPageModel : PageModel
    {
        // 上传处理逻辑
    }
    
  • 全局配置:在Startup.cs中调整表单选项与请求超时
    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<FormOptions>(options =>
        {
            options.MultipartBodyLengthLimit = 104857600; // 100MB
            options.ValueLengthLimit = int.MaxValue;
        });
    }
    
    public void Configure(IApplicationBuilder app)
    {
        // 注入请求超时中间件
        app.Use(async (context, next) =>
        {
            context.RequestAborted.Timeout = TimeSpan.FromMinutes(5);
            await next();
        });
        // 其他中间件配置...
    }
    

2. 调整IIS站点级限制

  • 打开IIS管理器,定位目标站点:
    1. 进入请求筛选 -> 编辑功能设置,将「最大允许内容长度」设为足够大的值(如104857600对应100MB)
    2. 进入站点高级设置,将「连接超时」调整为300秒以上
    3. 检查应用程序池的「进程模型」->「闲置超时」,避免进程提前回收

3. 优化Telerik Upload组件分块配置

组件默认分块可能与服务器设置不兼容,需显式配置分块与重试:

@(Html.Kendo().Upload()
    .Name("uploadFiles")
    .Async(async => async
        .Save("SaveFile", "Upload")
        .Remove("RemoveFile", "Upload")
        .ChunkSize(1048576) // 1MB单分块
        .MaxChunkRetries(3) // 分块失败重试次数
        .AutoRetryAfter(2000) // 重试间隔2秒
    )
)

同时确保服务器端分块接收逻辑正确,能合并分块文件。

4. 排查防火墙/代理限制

  • 检查Staging环境服务器防火墙,确认未限制上传请求的字节数或传输时长
  • 若使用反向代理(如ARR、Nginx),调整代理超时设置:
    • ARR:在「服务器代理设置」中延长「代理超时」
    • Nginx:修改nginx.conf,设置proxy_read_timeout 300s;、proxy_send_timeout 300s;

5. 日志定位细节问题

  • 启用ASP.NET Core详细日志,在appsettings.json中添加:
    {
        "Logging": {
            "LogLevel": {
                "Microsoft.AspNetCore.Http.Features": "Debug",
                "Microsoft.AspNetCore.Mvc": "Debug"
            }
        }
    }
    
  • 查看IIS日志(默认路径C:\inetpub\logs\LogFiles),排查是否有413(请求过大)、502(网关错误)等状态码,定位具体错误原因

内容的提问来源于stack exchange,提问作者Mohaaron

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:43:19