.NET5 Linux环境Function App双下划线Service Bus配置绑定报错原因
报错原因
该问题由Azure Functions WebJobs SDK的触发器配置解析规则与.NET常规分层配置解析规则的差异导致:
- .NET 配置体系为适配Linux系统不支持冒号(:)作为配置键分隔符的特性,会自动将双下划线(__)识别为分层配置的分隔符,因此你定义的
ServiceBusConfiguration__ConnectionString可以正常通过IOptions模式绑定到ServiceBusConfiguration.ConnectionString属性。 - 但Service Bus触发器所属的WebJobs Service Bus扩展解析Connection属性时,会自动将传入的键名中的双下划线替换为冒号,再去配置源匹配对应值:当你给Connection属性赋值为
ServiceBusConfiguration__ConnectionString时,扩展实际会查找名为ServiceBusConfiguration:ConnectionString的配置键,你的配置文件中不存在该键,因此触发连接字符串缺失的报错。
解决方法
无需维护两份重复的连接字符串,可任选以下方案实现兼容:
方案1:修改触发器Connection属性值
直接将Connection属性值改为冒号分隔的层级键即可,Linux环境下.NET配置系统会自动将冒号转换为双下划线匹配配置键,同时满足IOptions绑定和触发器读取的需求:
[Function("v1-on-send-invitation-email")] public async Task OnSendInvitationEmailAsync ( [ServiceBusTrigger("emails", Connection = "ServiceBusConfiguration:ConnectionString")] string requestMessage ) { // 业务逻辑 }
方案2:启动时做配置映射
如果不想修改触发器代码,可以在Function App的启动配置逻辑中,手动将ServiceBusConfiguration__ConnectionString的值映射到触发器需要的配置键,无需重复编写配置值。
内容的提问来源于stack exchange,提问作者Kzryzstof
相关产品推荐
相关产品推荐

