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

我的Azure App Service从何处读取.NET 6 Web API的应用配置?

为什么Azure App Service中看不到应用设置,但.NET 6 Web API仍能读取appsettings.production.json的配置?

问题场景

我用GitHub Actions将.NET 6 Web API部署到Azure App Service,项目包含三个配置文件:

  • appsettings.json
  • appsettings.development.json
  • appsettings.production.json

部署后应用能正常读取所有配置值,但Azure门户的「应用设置」面板是空的。修改appsettings.production.json中的值重新部署后,配置变更生效,但门户里依然看不到这些配置项,我想知道这是怎么回事。

我的GitHub Action配置

name: API CI/CD

env:
  AZURE_WEBAPP_NAME: test    # set this to the name of your Azure Web App
  AZURE_WEBAPP_PACKAGE_PATH: '.'      # set this to the path to your web app project, defaults to the repository root
  DOTNET_VERSION: '6.0'                 # set this to the .NET Core version to use

on:
  push:
    branches: [ "main" ]
  workflow_dispatch:

permissions:
  contents: read

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - name: Set up .NET Core
        uses: actions/setup-dotnet@v2
        with:
          dotnet-version: ${{ env.DOTNET_VERSION }}

      - name: Set up dependency caching for faster builds
        uses: actions/cache@v3
        with:
          path: ~/.nuget/packages
          key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
          restore-keys: |
            ${{ runner.os }}-nuget-

      - name: Build with dotnet
        run: dotnet build --configuration Release

      - name: dotnet publish
        run: dotnet publish  Test.Api -c Release -o ${{env.DOTNET_ROOT}}/myapp

      - name: Upload artifact for deployment job
        uses: actions/upload-artifact@v3
        with:
          name: .net-app
          path: ${{env.DOTNET_ROOT}}/myapp

  deploy:
    permissions:
      contents: none
    runs-on: ubuntu-latest
    needs: build
    environment:
      name: 'production'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}

    steps:
      - name: Download artifact from build job
        uses: actions/download-artifact@v3
        with:
          name: .net-app

      - name: Deploy to Azure Web App
        id: deploy-to-webapp
        uses: azure/webapps-deploy@v2
        with:
          app-name: ${{ env.AZURE_WEBAPP_NAME }}
          publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
          package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}

我的Program.cs代码

var builder        = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.RegisterApiVersioning();
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.RegisterOptions(builder.Configuration);
builder.Services.RegisterServices(builder.Configuration);
builder.Services.RegisterSwagger();

var app = builder.Build();

app.UseCors(maksCorsPolicy);
app.ConfigureSwagger();
app.UseHttpsRedirection();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.UseMiddleware<ExceptionMiddleware>();

app.Run();

原因解释

1. .NET默认配置加载逻辑

WebApplication.CreateBuilder(args)会自动按优先级加载多个配置来源,其中就包括:

  • 基础的appsettings.json
  • 对应环境的appsettings.{Environment}.json(生产环境下就是appsettings.production.json)
  • Azure App Service的应用设置(以环境变量形式注入)
  • 命令行参数

生产环境下,Azure App Service的默认环境名称是Production,所以应用启动时会自动读取部署包中的appsettings.production.json文件。

2. 配置文件被包含在发布包中

你的GitHub Action执行dotnet publish -c Release时,默认会把appsettings.production.json打包到发布目录里——因为.NET项目中这类配置文件的「复制到输出目录」属性默认是「如果较新则复制」,发布过程中会将其包含在部署包内,最终上传到Azure App Service的site/wwwroot目录下。应用运行时直接读取这个本地文件里的配置。

3. Azure门户「应用设置」和本地配置文件是两个独立来源

Azure门户里的「应用设置」是作为环境变量注入到应用进程的配置来源,和本地的appsettings文件完全独立。只有当你在门户中手动添加/修改配置项时,才会在这里显示;本地配置文件里的内容不会自动同步到门户面板中,所以你看不到这些配置,但应用依然能读取到。

验证方式

你可以登录Azure App Service的Kudu控制台(访问https://<你的应用名>.scm.azurewebsites.net/),进入site/wwwroot目录,就能看到appsettings.production.json文件,打开后就能确认里面的配置内容,这就是应用读取的来源。

建议做法

  • 敏感配置放门户应用设置:生产环境的敏感信息(比如数据库连接字符串、API密钥)建议放到Azure门户的「应用设置」中,因为环境变量的优先级高于本地配置文件,既能避免敏感信息提交到代码仓库,又能在不重新部署的情况下修改配置。
  • 配置优先级覆盖:如果要保留本地配置作为基础,同时用门户设置覆盖同名项,.NET的配置系统会自动处理——环境变量会覆盖本地配置文件中的对应值。
  • 集中配置管理:如果配置项较多,可使用Azure App Configuration服务来统一管理所有环境的配置,进一步提升安全性和可维护性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:14:55