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

ASP.NET Core 6部署IIS时secrets.json连接字符串无法访问求助

解决方案:IIS下访问User Secrets中的连接字符串

问题根源

IIS运行应用时使用应用程序池身份(默认是IIS AppPool\<你的应用池名称>),而User Secrets默认存储在当前用户的个人目录(C:\Users\<你的用户名>\AppData\Roaming\Microsoft\UserSecrets\<项目GUID>),该身份没有访问此目录的权限,导致无法读取连接字符串。


可行方案(按推荐程度排序)

方案1:为应用程序池身份授权访问User Secrets目录

  1. 定位User Secrets目录:
    在Visual Studio中右键项目 → 管理用户机密,打开secrets.json后,从文件资源管理器地址栏复制完整路径(类似C:\Users\992960t\AppData\Roaming\Microsoft\UserSecrets\abc123-xyz456...)。

  2. 添加目录访问权限:

    • 右键该目录 → 属性 → 安全 → 编辑 → 添加。
    • 输入应用程序池身份(格式:IIS AppPool\<你的应用池名称>),点击"检查名称"确认后确定。
    • 给该身份授予读取和执行权限,保存设置。
  3. 验证环境变量:
    确保IIS中应用的ASPNETCORE_ENVIRONMENT变量设置为Production:

    • IIS管理器 → 你的网站 → 配置 → 环境变量 → 添加变量ASPNETCORE_ENVIRONMENT,值为Production。

方案2:显式指定secrets.json路径加载

如果不想修改目录权限,可将secrets.json复制到应用部署目录(或其他安全位置),然后直接加载该文件:
修改Program.cs中的配置加载代码:

if (builder.Environment.IsProduction())
{
    // 替换为实际的secrets.json路径
    builder.Configuration.AddJsonFile(@"D:\Deploy\AktualniSchemaHfEditor\secrets.json", optional: false, reloadOnChange: true);
}

注意:此方法会将敏感连接字符串暴露在应用目录中,需确保该目录仅对应用程序池身份开放访问权限。

方案3:修改应用程序池身份为当前用户

将应用程序池的运行身份改为你自己的用户账户(不推荐生产环境,但可快速验证):

  1. IIS管理器 → 应用程序池 → 选择你的应用池 → 高级设置。
  2. 在"身份"选项中点击"..." → 选择"自定义账户" → 输入你的用户名和密码 → 确定。
  3. 重启应用程序池和网站。

额外检查点

  • 确认secrets.json中存在"Default"连接字符串,格式正确:
    {
      "ConnectionStrings": {
        "Default": "你的Oracle连接字符串"
      }
    }
    
  • 重启IIS应用程序池和网站,确保配置生效。

内容的提问来源于stack exchange,提问作者Matěj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 22:27:03