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管理器,定位目标站点:
- 进入请求筛选 -> 编辑功能设置,将「最大允许内容长度」设为足够大的值(如104857600对应100MB)
- 进入站点高级设置,将「连接超时」调整为300秒以上
- 检查应用程序池的「进程模型」->「闲置超时」,避免进程提前回收
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
相关产品推荐
相关产品推荐

