.NET 8 AWS Lambda项目模板中无法添加appsettings.json支持的问题
在AWS Lambda中配置appsettings.json并解决ArrayTypeMismatchException错误
问题分析
你遇到的System.ArrayTypeMismatchException通常由以下原因导致:
- appsettings.json的JSON格式错误(比如数组定义不符合规范)
- Lambda环境中程序集路径异常,导致读取的配置文件内容无效
- appsettings.json未被正确打包到Lambda部署包中
解决步骤
1. 确保appsettings.json结构正确
GetConnectionString方法默认读取配置中ConnectionStrings节点下的键,所以你的appsettings.json必须符合如下结构:
{ "ConnectionStrings": { "SAMPLE_CONNECTION_STRING": "your-actual-connection-string" } }
检查JSON语法是否完全正确,避免逗号遗漏、括号不匹配等问题。
2. 将appsettings.json设置为嵌入式资源
Lambda的文件系统环境与本地不同,依赖文件路径读取配置容易出问题,推荐将配置文件嵌入程序集:
- 在Visual Studio中右键
config/appsettings.json→ 属性 - 将生成操作设置为嵌入式资源
- 确认项目文件(.csproj)中包含如下配置:
<ItemGroup> <EmbeddedResource Include="config\appsettings.json" /> </ItemGroup>
3. 修改配置加载逻辑
替换原有的GetConfiguration方法,从嵌入式资源流读取配置:
private readonly IConfiguration _configuration; // 构造函数 public YourLambdaClass() { _configuration = GetConfiguration(); } private IConfiguration GetConfiguration() { var assembly = Assembly.GetExecutingAssembly(); // 资源名称格式:[项目命名空间].[文件夹].[文件名],比如你的项目名为MyLambda,这里就是MyLambda.config.appsettings.json var resourceName = "YourProjectNamespace.config.appsettings.json"; using var stream = assembly.GetManifestResourceStream(resourceName); if (stream == null) { throw new InvalidOperationException($"找不到嵌入式资源:{resourceName}"); } var cfgBuilder = new ConfigurationBuilder() .AddJsonStream(stream); // 如果你不需要环境变量覆盖配置,可以移除下面这行 // .AddEnvironmentVariables(); return cfgBuilder.Build(); }
4. 验证部署与调用
- 重新打包并部署Lambda函数
- 调用
_configuration.GetConnectionString("SAMPLE_CONNECTION_STRING"),此时应能正确读取连接字符串
内容的提问来源于stack exchange,提问作者user25193170
相关产品推荐
相关产品推荐

