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

容器化ASP.NET Core 6 WebAPI返回513请求实体过大错误求助

ASP.NET Core 6容器化API解决513请求过大错误

背景

  • 部署在Kubernetes中的ASP.NET Core 6 Web API,构建阶段使用mcr.microsoft.com/dotnet/sdk:6.0镜像,运行阶段使用mcr.microsoft.com/dotnet/aspnet:6.0镜像
  • Dockerfile内容:
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build-env
WORKDIR /App

# Copy everything
COPY . ./

# Restore as distinct layers
RUN dotnet restore

# Build and publish a release
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /App
COPY --from=build-env /App/out .
ENTRYPOINT ["dotnet", "MyProjectName.WebAPI.dll"]
  • 问题:客户端向API特定端点发送大请求时,返回(513) Request Entity Too Large错误

已尝试操作

  • 为目标控制器方法添加[DisableRequestSizeLimit]特性,无效果
  • 添加web.config文件(内容如下),但因容器未运行IIS,未生效:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
      <security>
          <requestFiltering>
              <requestLimits maxAllowedContentLength="2000000000" />
          </requestFiltering>
      </security>
  </system.webServer>
</configuration>

解决方法

首先明确:容器内运行的是Kestrel(ASP.NET Core默认服务器),同时需排查Kubernetes Ingress层的限制,具体方案如下:

1. 配置Kestrel全局请求大小限制

在Program.cs中直接配置Kestrel的最大请求体大小,或者全局表单选项限制:

var builder = WebApplication.CreateBuilder(args);

// 配置Kestrel最大请求体大小(单位:字节,示例为2GB)
builder.WebHost.ConfigureKestrel(options =>
{
    options.Limits.MaxRequestBodySize = 2000 * 1024 * 1024;
});

// 配置全局表单请求限制(适用于文件上传等场景)
builder.Services.Configure<Microsoft.AspNetCore.Http.Features.FormOptions>(options =>
{
    options.MultipartBodyLengthLimit = 2000 * 1024 * 1024;
    options.ValueLengthLimit = 2000 * 1024 * 1024;
});

// 其他服务配置逻辑...

var app = builder.Build();

// 中间件配置逻辑...

app.Run();

2. 针对特定端点配置请求限制

如果仅需放开单个端点的限制,可结合[RequestSizeLimit]特性使用(需配合Kestrel全局配置,避免被全局限制提前拦截):

[ApiController]
[Route("api/[controller]")]
public class UploadController : ControllerBase
{
    [HttpPost("large-file")]
    [RequestSizeLimit(2000 * 1024 * 1024)] // 2GB
    public async Task<IActionResult> UploadLargeFile()
    {
        // 业务处理逻辑
        return Ok();
    }
}

3. 调整Kubernetes Ingress配置

如果API通过Ingress对外暴露,Ingress控制器(如Nginx Ingress)默认有请求大小限制(通常为1MB),需修改Ingress资源配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: api-ingress
  annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: "2g" # 按需设置大小,示例为2GB
spec:
  rules:
  - host: your-api-domain.com
    http:
      paths:
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: api-service
            port:
              number: 80

4. 检查其他代理层限制

若容器前端还有额外反向代理服务(如内部Nginx),需同步调整对应服务的请求体大小限制配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:27:38