C#读取Azure App Configuration中content-type为application/json的配置问题
问题原因
Azure App Configuration的.NET配置提供程序内置了application/json内容类型的特殊解析逻辑:当你为配置键设置该内容类型时,提供程序不会将整个JSON串作为单个字符串值挂载到根键下,而是会自动把JSON对象扁平化展开为配置树的多个子节点。
以你给出的JSON结构为例,解析后会生成以下层级配置:
Credentials:Name="MyNewCsv"Credentials:Extension="csv"Credentials:Delimeter="|"
此时直接读取根键Credentials自然获取不到值,返回结果为null。当你移除application/json内容类型设置后,提供程序会将配置值作为普通字符串处理,因此_configuration["Credentials"]可以正常拿到完整JSON串,手动反序列化逻辑也能正常运行。
正确读取方案
方案1:直接绑定强类型对象(官方推荐)
不需要手动处理JSON反序列化,直接利用.NET配置的原生绑定能力读取结构化数据:
using Microsoft.Extensions.Configuration; public FileConfiguration GetFileConfiguration(string azureKeyName) { // 直接将对应配置节点绑定到强类型对象 return _configuration.GetSection(azureKeyName).Get<FileConfiguration>(); }
该方案完全适配Azure App Configuration的自动解析特性,代码更简洁,也不需要额外引入JSON序列化依赖。
方案2:强制读取原始JSON串
如果你确实需要获取完整的JSON原始字符串,可以在注册Azure App Configuration服务时,关闭JSON内容的自动展开逻辑:
// Program.cs 中添加Azure App Configuration源时修改配置 builder.Configuration.AddAzureAppConfiguration(options => { options.Connect("你的Azure App Configuration连接字符串") .ConfigureKeyValuePair(kv => { // 清空内容类型标记,所有配置值都按普通字符串处理 kv.ContentType = string.Empty; }); });
修改完成后你原有手动反序列化的代码就可以正常运行,直接读取_configuration["Credentials"]就能拿到完整的JSON字符串。
内容的提问来源于stack exchange,提问作者Simran Kaur
相关产品推荐
相关产品推荐

