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

.NET 9函数应用部署后上传大Azure Blob遇请求体限制问题

.NET 9 Azure函数上传大Blob的问题排查与解决

系列错误及处理过程

1. 首次异常:方法不受支持

  • 异常信息:

System.NotSupportedException: '指定的方法不受支持。'

  • 环境:.NET 9 + App Service Plan托管的函数应用
  • 报错代码行:var bytesRemaining = req.Body.Length;
  • 根因:Azure函数的请求体流为非可查找流,无法通过Length属性获取总长度,该方法在此场景下不被支持。

2. 二次异常:请求体超出Kestrel默认限制

  • 修改代码后出现的异常:

Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException: '请求体过大。最大请求体大小为30000000字节。'

  • 报错代码行:dataRead = await req.Body.ReadAsync(data, offset, dataToRead);
  • 根因:Kestrel默认最大请求体大小为30MB,上传的Blob超出此限制。

3. 本地正常但线上仍报错:函数自身请求体限制未配置

  • 已执行的处理:
    1. 配置Kestrel增大请求体限制:
    services.Configure<KestrelServerOptions>(options =>
    {
        options.Limits.MaxRequestBodySize = 300000000; // 设置为300MB
    });
    
    1. 使用Azure SDK标准方法上传流:await blobClient.UploadAsync(blobContent, true);
  • 线上异常信息:

执行函数时发生异常: Functions.uploadExtratcs 绑定参数'req'时出错 请求体过大。最大请求体大小为100字节。

  • 根因:Azure函数除了Kestrel的配置,还需通过host.json设置自身的HTTP请求体大小限制。

最终解决方案

在项目的host.json中添加HTTP扩展配置,覆盖默认的请求体大小限制:

{
  "extensions": {
    "http": {
      "maxRequestBodySize": 300000000
    }
  }
}
  • 注意:若使用隔离进程部署模型,需确保配置结构正确;同时确认App Service Plan的层级支持大文件上传(避免免费层/共享层的额外限制)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 04:25:03