Удаление значений Appsettings в Службе приложений Azure и Blazor Server

Я размещаю свое первое серверное приложение Blazor в Службе приложений Azure. В рамках этого в моих настройках приложения есть несколько записей, а также строка подключения к базе данных. Я знаю, что как только оно окажется в Azure, мне нужно будет установить параметры приложения через колонку «Конфигурация» на портале Azure, что я и сделал, и все работает. Однако, если я просмотрю файлы с помощью инструмента Kudo, я увижу там настройки приложения, а также настройки, которые я использовал для своей локальной разработки.

Затем я попробовал пару вещей, чтобы облегчить это. Сначала я попытался удалить настройки приложения из конвейера сборки. Я собирался это сделать, но когда я это сделал, я получил ошибку сервера 500 в Azure. Если добавить обратно настройки приложения, оно снова заработает. Затем я попытался добавить все свои настройки в файл appsettings.development.json, и мой конвейер удалил только этот файл, оставив в сборке пустые настройки приложения. Опять же, это вызвало ошибку сервера 500, пока я не вернул ее обратно. Что мне нужно сделать, чтобы мои настройки приложений не публиковались в Azure, или как мне скрыть свои значения, если мне нужно сохранить файл настроек приложений в сборке?

Примечание на случай, если это что-то изменит. Вот как я вызываю значение appsettings в своем коде.

Program.cs для строки подключения:

var connString = builder.Configuration["SqlConnection"];

Компоненты бритвы:

IConfiguration config (DI injdected)
_config = config;

_config["GroupName"]

Настройки приложений

{
  "GroupName": "MyGroup",
  "SqlConnection": "xxxxxxxxxxx",
  "OIDC": {
    "Authority": "xxxxxxx",
    "ClientId": "IDName",
    "ClientSecret": "",
    "CallbackPath": "/Index"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}

Не могли бы вы поделиться своим appsettings.json файлом.

Harshitha 25.09.2023 16:35

А также, пожалуйста, поделитесь скриншотом настроек приложения Azure.

Harshitha 25.09.2023 16:48

Добавлен. Настройки приложения Azure меняются на те, которые я указал в колонке «Конфигурация», которые включают настройки Key Vault для строки подключения. Однако, если я воспользуюсь Kudo и посмотрю раздел «Просмотр каталога/сайта wwwroot», я увижу appsettings.json как часть этих файлов. Если я открою файл appsettings оттуда, я увижу те же настройки, которые использую локально, включая информацию о строке прямого подключения.

Caverman 25.09.2023 17:20

Вы можете использовать secrets.json для локальной разработки и просто сохранить файл appsettings.json со значениями-заполнителями, т. е. "SqlConnection": "Sql_Placeholder" ваш secrets.json будет иметь приоритет над файлами appsettings для локального разработчика, а appsettings будет перезаписан Azure.

RBee 25.09.2023 17:38

Да... значения, заданные в конфигурации службы приложений, переопределяют значения файла appsettings.json.

Harshitha 25.09.2023 17:38

Я использую Visual Studio. Это так же просто, как щелкнуть правой кнопкой мыши по вашему проекту и выбрать «Управление секретами пользователя». Переместите туда свои конфиденциальные данные в том же формате. Создайте новый профиль публикации, и он должен распознать, что вы используете секреты. Это также защитит ваши секреты от исходного репозитория.

Brian Parker 25.09.2023 22:46
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
6
86
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Там я вижу настройки приложения, а также настройки, которые я использовал для локальной разработки.

Да, вы также можете увидеть значения локальной конфигурации. Но поскольку вы установили значения конфигурации в параметрах приложения Azure, локальные значения appsettings.json будут переопределены значениями параметров приложения Azure.

Так что с местными ценностями проблем не будет.

Что мне нужно сделать, чтобы мои настройки приложения не публиковались в Azure?

Если вы не хотите публиковать файл appsettings.json в Azure, измените свойства файла, как показано ниже.

Build Action - None
Copy to Output Directory - Do not copy

  • Приведенные ниже настройки будут добавлены в файл .csproj.

<ItemGroup>  
  <Content Remove = "appsettings.json" />
</ItemGroup>

<ItemGroup>
  <None Include = "appsettings.json">
    <CopyToOutputDirectory>Never</CopyToOutputDirectory>
  </None>
</ItemGroup>
  • Вы можете видеть, что папка site\wwwroot не содержит файла конфигурации.

  • Поскольку в развернутом приложении нет файла конфигурации, выходные данные развернутого приложения выглядят так, как показано ниже, без каких-либо значений.

  • Как только я установил значения в разделе «Настройки приложений»,

Тогда вывод будет

Спасибо @Brian Parker и RBee за комментарии.

Как упомянул Брайан Паркер, да, вы даже можете настроить секреты в файле secrets.json для работы локально.

Спасибо. Использование secrets.json работает, и я думаю, именно так мы и будем двигаться дальше. Мне не обязательно удалять файл appsettings, если он не содержит никаких реальных значений. Тем не менее, я проверил настройку свойств, чтобы не копировать настройки приложения, и это сработало. Мне пришлось вручную добавить настройки в файл .csproj, но как только я это сделал, все заработало, как вы сказали.

Caverman 26.09.2023 19:00

Другие вопросы по теме