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

.NET 8独立模式Azure Functions部署后200MB负载限制问题求助

问题背景

我有一个基于.NET 8独立模式的Azure Functions项目,包含一个HTTP触发函数用于接收大文档内容作为请求负载。本地测试时,负载超过28MB会触发413 Entity Too Large错误,于是在Program.cs中配置Kestrel的请求体大小限制为524288000字节(500MB),本地运行正常。但部署到Windows操作系统的P1v3高级计划Azure环境后,负载超过200MB仍会收到413错误,低于200MB则正常。

已尝试的方案:

  • 将MaxRequestBodySize设为null(按文档应为无限制)
  • 为函数添加[DisableRequestSizeLimit]特性
    均未解决问题。

后续排查发现,Azure Functions宿主的默认web.config中设置了maxAllowedContentLength="210000000"(约200.27MB),且自行部署的web.config会被Azure忽略。

解决方案

问题的核心在于:Windows高级计划的Azure Functions前端由IIS托管,IIS的请求体大小限制会先于Kestrel的配置生效。默认宿主的web.config中硬编码了200MB左右的maxAllowedContentLength,导致超过该值的请求被IIS直接拦截,无法到达Kestrel层面。

可通过以下步骤解决:

1. 设置应用配置覆盖IIS限制

在Azure门户的函数应用中,添加或修改应用设置WEBSITE_MAX_REQUEST_BODY_SIZE,值设为你需要的最大请求体字节数(例如524288000表示500MB)。该设置会自动覆盖IIS的maxAllowedContentLength限制。

2. 确保Kestrel配置正确

调整Program.cs中的Kestrel配置,确保其值不小于WEBSITE_MAX_REQUEST_BODY_SIZE,或设为null以取消Kestrel层面的限制:

_ = services.Configure<KestrelServerOptions>(opt => 
    opt.Limits.MaxRequestBodySize = builder.Configuration.GetValue<long?>("FUNCTIONS_REQUEST_BODY_SIZE_LIMIT"));

(注意将类型改为long?以支持null值)

3. 添加函数级别的大小限制禁用

在HTTP触发函数上添加[DisableRequestSizeLimit]特性,确保函数本身不会额外限制请求体大小:

[FunctionName("YourHttpFunction")]
[DisableRequestSizeLimit]
public async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,
    ILogger log)
{
    // 函数逻辑
}

4. 重启函数应用

修改应用设置后,需要在Azure门户中重启函数应用,确保所有配置生效。

替代方案(若上述方法无效)

如果由于环境限制无法修改IIS配置,可考虑:

  • 使用Azure Blob Storage作为中转:客户端先将大文件上传至Blob,再向函数发送Blob的访问链接,函数从Blob读取内容处理。此方案避免了直接通过HTTP请求传递大负载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 08:55:53