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

C# ADLS2 Blob触发函数使用托管身份报InvalidHeaderValue错误

问题根因

从错误日志里的Server: Azurite-Blob/3.16.0可以直接判断,运行时根本没有发起对目标线上ADLS2存储账户的请求,所有存储请求都被路由到了本地的Azurite存储模拟器,具体触发原因有三个:

  • 你的local.settings.json中写了//Blob trigger格式的单行注释,标准JSON不支持单行注释语法,会导致Functions本地运行时加载配置时解析失败,后面的MyConnection相关配置项完全没有被读取到。当运行时找不到BlobTrigger特性指定的MyConnection连接配置时,会自动回退使用AzureWebJobsStorage配置的本地模拟器连接。
  • 你本地安装的Azurite版本为3.16.0,该版本和支持身份鉴权的新版Azure Storage SDK存在兼容性问题,无法识别SDK请求中携带的部分鉴权相关HTTP头,直接返回InvalidHeaderValue的400错误。
  • 如果你的项目引用的Microsoft.Azure.WebJobs.Extensions.Storage包版本低于5.0.0,就算配置文件格式正确,老版本扩展也不支持基于托管身份的无密钥连接格式,会直接忽略带__blobServiceUri、__queueServiceUri后缀的配置项,同样会回退到AzureWebJobsStorage的模拟器连接。

注意:Visual Studio服务依赖面板的连接状态检测是独立于Functions运行时加载逻辑实现的,不会校验配置文件语法、扩展版本兼容性,因此显示连接正常不代表运行时能正确加载连接配置。

修复步骤
  1. 修正local.settings.json配置,删除所有注释内容,保证JSON格式合法,修正后的配置参考:
{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "MyConnection__blobServiceUri": "https://mystorageaccount.blob.core.windows.net",
    "MyConnection__queueServiceUri": "https://mystorageaccount.queue.core.windows.net"
  }
}
  1. 升级本地Azurite模拟器到3.20.0以上最新稳定版,修复旧版本对新版SDK请求头的兼容问题,升级完成后重启Azurite服务。
  2. 检查项目Nuget引用,将Microsoft.Azure.WebJobs.Extensions.Storage升级到5.0.0以上稳定版本,低于该版本的扩展完全不支持无密钥的身份鉴权连接方式。
  3. 额外校验本地登录Azure账号的权限,除了Blob数据的读写权限外,还需要给账号分配目标存储账户的存储队列数据参与者角色——Blob触发器底层依赖存储队列接收Blob变更通知,没有队列权限会导致触发器初始化失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:06:26