netcore3.1 用vs2022启动iis上传文件报413 Request Entity Too Large
时间: 2025-06-12 08:46:10 浏览: 21
当你在使用 .NET Core 3.1 和 Visual Studio 2022 启动 IIS 上传文件时,如果遇到 `413 Request Entity Too Large` 错误,这表明请求的实体大小超出了 IIS 的默认限制。以下是解决此问题的详细步骤和代码示例。
---
### 解决方案
#### 1. 修改 IIS 配置以支持大文件上传
IIS 默认对请求体大小有严格限制(通常是 30MB)。你需要修改 `web.config` 文件来增加允许的最大请求体大小。
以下是一个完整的 `web.config` 文件示例:
```xml
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<security>
<requestFiltering>
<!-- 设置最大请求长度为 4GB -->
<requestLimits maxAllowedContentLength="4294967295" />
</requestFiltering>
</security>
</system.webServer>
<system.web>
<!-- 设置 ASP.NET 最大请求长度为 4GB -->
<httpRuntime maxRequestLength="4194304" executionTimeout="3600" />
</system.web>
</configuration>
```
#### 代码解释
1. **`maxAllowedContentLength`**:
- 这是 IIS 的配置项,用于设置请求体的最大字节数,默认值为 30MB(约 31457280 字节)。
- 将其设置为 `4294967295` 表示允许的最大请求体大小为 4GB。
2. **`maxRequestLength`**:
- 这是 ASP.NET 的配置项,用于设置请求体的最大 KB 数,默认值为 4MB(即 4096KB)。
- 将其设置为 `4194304` 表示允许的最大请求体大小为 4GB。
3. **`executionTimeout`**:
- 设置请求处理的超时时间(单位为秒),避免长时间上传导致请求中断。
---
#### 2. 修改 .NET Core 应用程序的配置
除了修改 IIS 配置外,还需要在 .NET Core 应用程序中调整相关设置。以下是 `Startup.cs` 的配置示例:
```csharp
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
// 配置 MVC
services.AddControllers();
// 配置大文件上传的限制
services.Configure<IISServerOptions>(options =>
{
options.MaxRequestBodySize = null; // 设置为 null 表示不限制大小
});
services.Configure<FormOptions>(options =>
{
options.MultipartBodyLengthLimit = long.MaxValue; // 设置 multipart/form-data 的最大长度
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
```
#### 代码解释
1. **`MaxRequestBodySize`**:
- 配置 IIS 服务器的最大请求体大小,默认值是 30MB。将其设置为 `null` 表示不限制大小。
2. **`MultipartBodyLengthLimit`**:
- 配置 `FormOptions`,用于限制 `multipart/form-data` 的最大长度,默认值也是 30MB。将其设置为 `long.MaxValue` 表示不限制大小。
---
#### 3. 创建文件上传控制器
创建一个用于处理文件上传的控制器。以下是一个简单的实现:
```csharp
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.IO;
using System.Threading.Tasks;
[Route("api/[controller]")]
[ApiController]
public class FileUploadController : ControllerBase
{
[HttpPost]
public async Task<IActionResult> UploadFile(IFormFile file)
{
if (file == null || file.Length == 0)
{
return BadRequest("未选择文件");
}
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "uploads", file.FileName);
// 确保目录存在
Directory.CreateDirectory(Path.GetDirectoryName(filePath));
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
return Ok(new { FilePath = filePath });
}
}
```
#### 代码解释
1. **`IFormFile`**:
- 用于接收上传的文件数据。
2. **保存文件**:
- 使用 `FileStream` 将文件保存到指定路径。
- 路径为 `uploads` 目录下的文件名。
3. **返回结果**:
- 返回文件保存的路径作为响应。
---
### 测试上传功能
你可以使用 Postman 或其他工具测试文件上传功能:
1. 请求类型:`POST`
2. URL:`http://localhost:port/api/fileupload`
3. Body:选择 `form-data`,添加键名为 `file` 的文件字段。
---
###
阅读全文