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

生产环境K8s部署的.NET Core文件上传API报400错误求助

问题描述

我开发了一个接收IFormFile作为输入、将文件上传至云存储的.NET Core API Post方法,本地环境运行正常,但部署到Kubernetes集群的生产环境后调用该接口时抛出400错误。

接口代码如下:

[HttpPost("")]
[Consumes("multipart/form-data")]
public async Task<ActionResult> UploadFileAttachmentAsync(IFormFile file)
{
    var result = await this.attachmentService.UploadAttachmentAsync(file);

    if (result != null)
    {
        return this.StatusCode(StatusCodes.Status200OK);
    }

    return this.StatusCode(StatusCodes.Status500InternalServerError);
}

本地通过Swagger UI、Postman等工具调用接口(地址:https://localhost:4242/attachments)均能正常获取文件输入并完成上传,但使用生产环境地址https://test-api.example.com/attachments调用时,IFormFile输入验证失败,返回如下400错误信息:

{
  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
  "title": "Bad Request",
  "status": 400,
  "traceId": "00-7f70c739657ae91cccffdb47400cdf2f-0f3bd7b4bcce3774-00"
}
排查方向
  • Kubernetes Ingress配置问题:检查Ingress控制器(如NGINX)是否允许multipart/form-data请求,是否设置了合理的client_max_body_size参数,部分Ingress默认会限制大体积请求,或未正确转发multipart相关请求头。
  • 请求体大小限制:.NET Core默认限制multipart请求体大小为30MB,若上传文件超过该值会触发400错误。可在Program.cs中调整限制:
    builder.Services.Configure<FormOptions>(options =>
    {
        options.MultipartBodyLengthLimit = 104857600; // 设置为100MB
    });
    
  • 请求参数名不匹配:确认生产环境调用时,文件参数的名称是否为file(与接口方法的参数名一致),部分客户端工具可能默认使用files或其他名称,导致模型绑定失败。
  • SSL终止后的请求头转发问题:若Ingress在Kubernetes中做了SSL终止,需确认是否完整转发Content-Type、Content-Length等请求头,缺失这些头会导致.NET Core无法正确解析multipart表单。
  • 中间件拦截干扰:检查生产环境是否添加了额外的中间件(如WAF、自定义日志中间件),这类中间件可能拦截或修改multipart请求内容,导致模型绑定失败。
  • Pod资源不足:查看Kubernetes Pod的CPU、内存使用情况,若资源不足,请求处理时无法完成multipart表单解析,也会返回400错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:37:40