Поделиться через


Конфигурация приложения

Подсказка

Это фрагмент из электронной книги для разработчиков ASP NET веб-формы для Azure, Blazor доступных в документации .NET или в виде бесплатного скачиваемого PDF-файла, который можно читать в автономном режиме.

Blazor-for-ASP-NET-Web-Forms-Developers eBook cover эскиз.

Основным способом загрузки конфигурации приложения в веб-формах является запись в web.config-файле на сервере или связанном файле конфигурации, на который ссылается web.config. Статический ConfigurationManager объект можно использовать для взаимодействия с параметрами приложения, строками подключения репозитория данных и другими расширенными поставщиками конфигурации, добавленными в приложение. Обычно взаимодействие с конфигурацией приложения можно увидеть в следующем коде:

var configurationValue = ConfigurationManager.AppSettings["ConfigurationSettingName"];
var connectionString = ConfigurationManager.ConnectionStrings["MyDatabaseConnectionName"].ConnectionString;

При использовании ASP.NET Core, Blazor файл МОЖЕТ присутствовать, если приложение размещено на сервере Windows IIS. Взаимодействие с этой конфигурацией отсутствует ConfigurationManager, однако вы можете получить более структурированную конфигурацию приложения из других источников. Давайте рассмотрим, как собирается конфигурация и как можно по-прежнему получать доступ к сведениям о конфигурации из файлаweb.config .

Источники конфигурации

ASP.NET Core распознает, что существует множество источников конфигурации, которые можно использовать для приложения. Платформа пытается предложить вам лучшие из этих функций по умолчанию. Конфигурация считывается и агрегируется из этих различных источников по ASP.NET Core. Позже загруженные значения для того же ключа конфигурации имеют приоритет над предыдущими значениями.

ASP.NET Core предназначен для облачной поддержки и упрощения настройки приложений как для операторов, так и для разработчиков. ASP.NET Core распознает среду и знает, работает ли он в вашей Production или Development среде. Индикатор среды задается в системной переменной ASPNETCORE_ENVIRONMENT среды. Если значение не настроено, приложение по умолчанию запускается в Production среде.

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

  1. appsettings.json файл, если он присутствует
  2. файл appsettings.{ENVIRONMENT_NAME}.json, если он присутствует
  3. Файл секретов пользователей на диске, если он присутствует
  4. Переменные среды
  5. Аргументы командной строки

appsettings.json форматирование и доступ

Файл appsettings.json может быть иерархическим со значениями, структурированными следующим образом:

{
  "section0": {
    "key0": "value",
    "key1": "value"
  },
  "section1": {
    "key0": "value",
    "key1": "value"
  }
}

При представлении предыдущего JSON система конфигурации сглаживает дочерние значения и ссылается на их полные иерархические пути. Символ двоеточия (:) отделяет каждое свойство в иерархии. Например, ключ конфигурации section1:key0 получает значение section1 литерала объекта key0.

Секреты пользователей

Секреты пользователей:

  • Значения конфигурации, хранящиеся в JSON-файле на рабочей станции разработчика, за пределами папки разработки приложений.
  • Загружается только при выполнении в среде Development.
  • Связанное с определенным приложением.
  • Управляется с помощью команды .NET CLI user-secrets .

Настройте приложение для хранилища секретов, выполнив user-secrets команду:

dotnet user-secrets init

Предыдущая команда добавляет UserSecretsId элемент в файл проекта. Элемент содержит GUID, который используется для связывания секретов с приложением. Затем можно определить секрет с помощью команды set. Рассмотрим пример.

dotnet user-secrets set "Parent:ApiKey" "12345"

Предыдущая команда делает Parent:ApiKey ключ конфигурации доступным на рабочей станции разработчика со значением 12345.

Дополнительные сведения о создании, хранении и управлении секретами пользователей см. в разделе "Безопасное хранение секретов приложений в разработке" в документе ASP.NET Core .

Переменные среды

Следующий набор значений, загруженных в конфигурацию приложения, — это переменные среды системы. Все параметры переменной среды системы теперь доступны через API конфигурации. Иерархические значения раскладываются и разделяются символами двоеточия при чтении внутри приложения. Однако некоторые операционные системы не допускают использования двоеточия в именах переменных среды. ASP.NET Core устраняет это ограничение, преобразуя значения с двойным подчеркиванием (__) в двоеточие при их доступе. Значение Parent:ApiKey из приведенного выше раздела секретов пользователя можно переопределить с помощью переменной Parent__ApiKeyсреды.

Аргументы командной строки

При запуске приложения можно также указать конфигурацию в качестве аргументов командной строки. Используйте нотацию с двойным тире (--) или косой чертой/ (), чтобы указать имя заданного значения конфигурации и настроенное значение. Синтаксис похож на следующие команды:

dotnet run CommandLineKey1=value1 --CommandLineKey2=value2 /CommandLineKey3=value3
dotnet run --CommandLineKey1 value1 /CommandLineKey2 value2
dotnet run Parent:ApiKey=67890

Возврат номера web.config

Если вы развернули свое приложение в Windows на IIS, файлweb.config по-прежнему настраивает IIS для управления вашим приложением. По умолчанию IIS добавляет ссылку на модуль ASP.NET Core (ANCM). ANCM — это собственный модуль IIS, на котором размещено приложение вместо веб-сервера Kestrel. Этот разделweb.config похож на следующую разметку XML:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath=".\MyApp.exe"
                  stdoutLogEnabled="false"
                  stdoutLogFile=".\logs\stdout"
                  hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>

Конфигурация для конкретного приложения может быть определена путем вложения элемента environmentVariables внутрь элемента aspNetCore. Значения, определенные в этом разделе, отображаются в приложении ASP.NET Core в виде переменных среды. Переменные среды загружаются соответствующим образом в этот сегмент запуска приложения.

<aspNetCore processPath="dotnet"
      arguments=".\MyApp.dll"
      stdoutLogEnabled="false"
      stdoutLogFile=".\logs\stdout"
      hostingModel="inprocess">
  <environmentVariables>
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
    <environmentVariable name="Parent:ApiKey" value="67890" />
  </environmentVariables>
</aspNetCore>

Прочитать конфигурацию в приложении

ASP.NET Core предоставляет конфигурацию приложения через IConfiguration интерфейс. Этот интерфейс конфигурации должен запрашиваться компонентами Blazor, страницами Blazor и любым другим классом, управляемым ASP.NET Core, которому требуется доступ к конфигурации. Платформа ASP.NET Core автоматически заполняет этот интерфейс разрешенной конфигурацией, настроенной ранее. Blazor На странице или в разметке Razor компонента можно внедрить объект IConfiguration с помощью директивы @inject в начале файла .razor следующим образом:

@inject IConfiguration Configuration

В упомянутом высказывании объект IConfiguration становится доступным как переменная Configuration в оставшейся части шаблона Razor.

Отдельные параметры конфигурации можно считывать, указав иерархию параметров конфигурации, запрошенную в качестве параметра индексатора:

var mySetting = Configuration["section1:key0"];

Вы можете получить все разделы конфигурации с помощью метода GetSection, чтобы получить коллекцию ключей в конкретном местоположении с синтаксисом, похожим на GetSection("section1"), чтобы извлечь конфигурацию для section1 из предыдущего примера.

Строго типизированная конфигурация

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

В ASP.NET Core можно указать иерархию классов, которая получит значения конфигурации. Эти классы:

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

Для предыдущего примераappsettings.json можно определить следующие классы для записи значений:

public class MyConfig
{
    public MyConfigSection section0 { get; set;}

    public MyConfigSection section1 { get; set;}
}

public class MyConfigSection
{
    public string key0 { get; set; }

    public string key1 { get; set; }
}

Эту иерархию классов можно заполнить, добавив следующую строку в метод Startup.ConfigureServices (или в соответствующее место в Program.cs, используя свойство builder.Services вместо services).

services.Configure<MyConfig>(Configuration);

В остальной части приложения можно добавить входной параметр в классы или директиву @inject в шаблоны Razor типа IOptions<MyConfig> для получения строго типизированных параметров конфигурации. Свойство IOptions<MyConfig>.Value возвращает MyConfig значение, заполненное параметрами конфигурации.

@inject IOptions<MyConfig> options
@code {
    var MyConfiguration = options.Value;
    var theSetting = MyConfiguration.section1.key0;
}

Дополнительные сведения о функции "Параметры" можно найти в шаблоне "Параметры" в документе ASP.NET Core .