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


ASP.NET Core Blazor средах

Примечание.

Это не последняя версия этой статьи. В текущей версии см. версию .NET 10 этой статьи.

Предупреждение

Эта версия ASP.NET Core больше не поддерживается. Дополнительные сведения см. в политике поддержки .NET и .NET Core. В текущей версии см. версию .NET 10 этой статьи.

В этой статье объясняется, как настроить и прочитать среду в Blazor приложении.

При локальном запуске приложения среда по умолчанию устанавливается в Development. Когда приложение выпускается, среда по умолчанию устанавливается как Production.

Рекомендуется использовать следующие соглашения:

  • Всегда используйте имя среды "Development" для локальной разработки. Это связано с тем, что платформа ASP.NET Core ожидает именно это имя при настройке приложения и инструментов для локальных запусков разработки приложения.

  • Для тестирования, промежуточной и рабочей среды всегда публикуйте и развертывайте приложение. Вы можете использовать любую схему именования окружений для опубликованных приложений, но всегда применяйте имена файлов конфигурации приложения, в которых регистр сегмента окружения точно соответствует названию окружения. Для промежуточного выполнения используйте "Staging" (прописные "S") в качестве имени среды и назовите файл параметров приложения так, чтобы он соответствовал (appsettings.Staging.json). Для производства используйте "Production" (заглавную "P") в качестве имени среды и назовите файл настроек приложения в соответствии (appsettings.Production.json).

Настройка среды

Среда устанавливается с помощью любого из следующих подходов:

На клиенте для Blazor Web App, среда определяется с сервера с помощью HTML-комментария, с которым разработчики не взаимодействуют.

<!--Blazor-WebAssembly:{"environmentName":"Development", ...}-->

Для автономного Blazor WebAssembly приложения задайте среду со <WasmApplicationEnvironmentName> свойством MSBuild в файле проекта приложения (.csproj). Следующий пример задает Staging среду:

<WasmApplicationEnvironmentName>Staging</WasmApplicationEnvironmentName>

Среды по умолчанию — Development для сборки и Production для публикации.

Существует несколько подходов к настройке среды в автономном Blazor WebAssembly приложении во время операций сборки и развертывания, а также один подход для запуска или работы приложения на клиенте.

  • Установите значение свойства, когда выполняется dotnet build или dotnet publish. Следующий пример задает среду Staging для публикации приложения:

    dotnet publish -p:WasmApplicationEnvironmentName=Staging
    
  • Задайте свойство во время сборки или публикации на основе конфигурации приложения в Visual Studio. Следующие группы свойств можно использовать в файле проекта приложения или любом файле конфигурации публикации (.pubxml). Добавьте дополнительные группы свойств для других конфигураций сборки, используемых.

    <PropertyGroup Condition="'$(Configuration)' == 'Debug'">
      <WasmApplicationEnvironmentName>Development</WasmApplicationEnvironmentName>
    </PropertyGroup>
    
    <PropertyGroup Condition="'$(Configuration)' == 'Release'">
      <WasmApplicationEnvironmentName>Production</WasmApplicationEnvironmentName>
    </PropertyGroup>
    
  • Среду можно задать на основе использования профиля публикации. В следующем примере первое условие задает среду Development , если профиль публикации не используется (применяется как к операциям сборки, так и к публикации без профиля), а второе условие охватывает настройку среды Production при использовании любого профиля публикации:

    <PropertyGroup Condition="'$(PublishProfile)' == ''">
      <WasmApplicationEnvironmentName>Development</WasmApplicationEnvironmentName>
    </PropertyGroup>
    
    <PropertyGroup Condition="'$(PublishProfile)' != ''">
      <WasmApplicationEnvironmentName>Production</WasmApplicationEnvironmentName>
    </PropertyGroup>
    
  • Создайте пользовательскую конечную точку веб-API на стороне сервера. Автономное Blazor WebAssembly приложение запрашивает среду из веб-API при запуске приложения или по запросу во время его выполнения. Значение должно передаваться через WebAssemblyStartOptions или с помощью withApplicationEnvironment.

    Примечание.

    Ссылки в документации на исходный код .NET обычно загружают ветку репозитория по умолчанию, которая представляет текущую разработку для следующего выпуска .NET. Чтобы выбрать тег для конкретного релиза, используйте раскрывающийся список Переключение ветвей или тегов. Дополнительные сведения см. в статье Выбор тега версии исходного кода ASP.NET Core (dotnet/AspNetCore.Docs #26205).

На клиенте для Blazor Web App среда определяется с сервера с помощью промежуточного слоя, который передает среду в браузер через заголовок с именем Blazor-Environment. Заголовок задает среду при создании WebAssemblyHost в клиентском файле Program (WebAssemblyHostBuilder.CreateDefault).

Для автономного Blazor WebAssembly приложения, работающего локально, сервер разработки добавляет Blazor-Environment заголовок с именем среды, полученной из среды размещения. Среда размещения задает окружение из переменной среды ASPNETCORE_ENVIRONMENT, определенной файлом проекта Properties/launchSettings.json. Значение по умолчанию переменной среды в проекте, созданном на основе шаблона Blazor WebAssembly проекта Development. Дополнительные сведения см. в разделе "Настройка клиентской среды с помощью раздела заголовка ".

На клиенте размещенного Blazor WebAssembly приложения среда определяется сервером с помощью промежуточного слоя, которое передает среду в браузер через заголовок, названный Blazor-Environment. Заголовок задает среду при создании WebAssemblyHost в клиентском файле Program (WebAssemblyHostBuilder.CreateDefault).

Для автономного Blazor WebAssembly приложения, работающего локально, сервер разработки добавляет Blazor-Environment заголовок с именем среды, полученной из среды размещения. Среда размещения задает окружение из переменной среды ASPNETCORE_ENVIRONMENT, определенной файлом проекта Properties/launchSettings.json. Значение по умолчанию переменной среды в проекте, созданном на основе шаблона Blazor WebAssembly проекта Development. Дополнительные сведения см. в разделе "Настройка клиентской среды с помощью раздела заголовка ".

Для локального запуска приложения в разработке приложение по умолчанию использует Development среду. Публикация приложения по умолчанию использует среду Production.

Общие рекомендации по настройке приложений ASP.NET Core см. в ASP.NET средах выполнения Core. Сведения о конфигурации приложений на стороне сервера со статическими файлами в средах, отличных от среды , во время разработки и тестирования (например, ), см. в разделе "Статические файлы в ASP.NET Core" .

Настройка клиентской среды с помощью Blazor конфигурации запуска

Следующий пример начинается Blazor в Staging среде, если имя узла содержит localhost. В противном случае для среды устанавливается значение по умолчанию.

Blazor Web App:

<script src="{BLAZOR SCRIPT}" autostart="false"></script>
<script>
  if (window.location.hostname.includes("localhost")) {
    Blazor.start({
      webAssembly: {
        environment: "Staging"
      }
    });
  } else {
    Blazor.start();
  }
</script>

В предыдущем примере заполнитель {BLAZOR SCRIPT} обозначает путь к скрипту и имя файла Blazor. Сведения о расположении скрипта см. в разделе структура проекта ASP.NET Core.

Примечание.

Для Blazor Web Appэтого webAssembly>environmentсвойства в Blazor.start конфигурации рекомендуется сопоставить среду на стороне сервера с средой, заданной в свойстве.environment В противном случае предварительное отображение на сервере работает в другой среде, отличной от отрисовки на клиенте, что приводит к произвольным последствиям. Общие рекомендации по настройке среды для Blazor Web App см. в средах выполнения ASP.NET Core.

Самостоятельное Blazor WebAssembly:

<script src="{BLAZOR SCRIPT}" autostart="false"></script>
<script>
  if (window.location.hostname.includes("localhost")) {
    Blazor.start({
      environment: "Staging"
    });
  } else {
    Blazor.start();
  }
</script>

В предыдущем примере заполнитель {BLAZOR SCRIPT} обозначает путь к скрипту и имя файла Blazor. Сведения о расположении скрипта см. в разделе структура проекта ASP.NET Core.

Использование свойства environment переопределяет среду, заданную заголовком Blazor-Environment.

Предыдущий подход задаёт среду клиента без изменения значения Blazor-Environment заголовка и не изменяет ведение журнальной записи консоли проекта сервера для среды запуска для Blazor Web App, которая приняла глобальную интерактивную визуализацию WebAssembly.

Чтобы записать среду в консоль в автономном приложении Blazor WebAssembly или в проекте .Client для Blazor Web App, поместите следующий код C# в файл Program после создания WebAssemblyHost с помощью WebAssemblyHostBuilder.CreateDefault и перед строкой, которая собирает и запускает проект (await builder.Build().RunAsync();):

Console.WriteLine(
    $"Client Hosting Environment: {builder.HostEnvironment.Environment}");

Дополнительные сведения о запуске Blazor см. в статье Запуск ASP.NET Core Blazor.

Настройка клиентской среды с помощью заголовка

Blazor WebAssembly приложения могут установить среду с заголовком Blazor-Environment. В частности, заголовок ответа должен быть установлен для _framework/blazor.boot.json файла, но нет вреда в установке заголовка в ответах файлового сервера на другие Blazor запросы файлов или всего Blazor развертывания.

Blazor Хотя платформа выдает имя заголовка в стиле kebab case с сочетанием прописных и строчных букв (Blazor-Environment), вы можете использовать либо полностью строчные, либо полностью заглавные буквы в формате kebab case (blazor-environment, BLAZOR-ENVIRONMENT).

Для локальной разработки с встроенным сервером разработки Blazor можно управлять значением заголовка Blazor-Environment, задав значение переменной ASPNETCORE_ENVIRONMENT в файле проекта Properties/launchSettings.json. При локальном запуске с сервером разработки порядок приоритета для определения среды приложения — Blazor.start конфигурация (environment ключ)>Blazor-Environment заголовка ответа (blazor.boot.json файл) >ASPNETCORE_ENVIRONMENT переменной среды (launchSettings.jsonфайл). Нельзя использовать метод переменной ASPNETCORE_ENVIRONMENT среды (launchSettings.json) для развернутого Blazor WebAssembly приложения. Этот метод работает только с сервером разработки на локальных запусках приложения.

IIS

В следующем примере для IIS пользовательский заголовок (Blazor-Environment) добавляется в опубликованный web.config файл. Файл web.config находится в папке bin/Release/{TARGET FRAMEWORK}/publish, где {TARGET FRAMEWORK} плейсхолдер является целевой платформой.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    ...
    <httpProtocol>
      <customHeaders>
        <add name="Blazor-Environment" value="Staging" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>

Примечание.

Чтобы использовать пользовательский web.config файл для IIS, который не будет перезаписан при публикации приложения в папку publish, ознакомьтесь с материалом Хостинг и развертывание ASP.NET Core Blazor WebAssembly с помощью IIS.

Nginx

Для серверов Nginx используйте директиву add_header из ngx_http_headers_module:

http {
    server {
        ...
        location / {
            ...
            add_header Blazor-Environment "Staging";
        }
    }
}

Дополнительные сведения см. в следующих ресурсах:

Apache

Для серверов Apache используйте директиву модуля Header: mod_headers

<VirtualHost *:80>
    ...
    Header set Blazor-Environment "Staging"
    ...
</VirtualHost>

Дополнительные сведения см. в следующих ресурсах:

Настройка среды для службы приложений Azure

Для автономного Blazor WebAssembly приложения можно вручную задать среду с помощью конфигурации запуска или заголовкаBlazor-Environment.

Для серверного приложения настройте среду с помощью ASPNETCORE_ENVIRONMENT параметра приложения в Azure:

  1. Убедитесь, что регистр сегментов среды в названиях файлов настроек приложения точно соответствует регистру названия самой среды. Например, совпадающее имя файла параметров приложения для Staging среды appsettings.Staging.json. Если имя файла — appsettings.staging.json (строчная буква "s"), файл не расположен, а параметры в файле не используются в Staging среде.

  2. Для развертывания Visual Studio убедитесь, что приложение развертывается в правильном слоте развертывания. Для приложения с именем BlazorAzureAppSampleприложение развертывается в Staging слоте развертывания.

  3. В портале Azure для слота развертывания окружения настройте окружение, используя параметр ASPNETCORE_ENVIRONMENT приложения. Промежуточный слот службы приложений для приложения с именем BlazorAzureAppSample называется BlazorAzureAppSample/Staging. Для конфигурации Staging слота создайте настройку приложения ASPNETCORE_ENVIRONMENT с значением Staging. Параметр слота развертывания включен для этой настройки.

При запросе в браузере BlazorAzureAppSample/Staging приложение загружается в среде Staging по адресу https://blazorazureappsample-staging.azurewebsites.net.

При загрузке приложения в браузере коллекция заголовков ответа для blazor.boot.json указывает, что значение заголовка Blazor-Environment равно Staging.

Настройки приложения из файла appsettings.{ENVIRONMENT}.json загружаются приложением, где {ENVIRONMENT} является переменной средой приложения. В предыдущем примере параметры из appsettings.Staging.json файла загружаются.

Чтение среды в Blazor WebAssembly приложении

Получите окружение приложения в компоненте, внедрив IWebAssemblyHostEnvironment и прочитав свойство Environment.

ReadEnvironment.razor:

@page "/read-environment"
@using Microsoft.AspNetCore.Components.WebAssembly.Hosting
@inject IWebAssemblyHostEnvironment Env

<h1>Environment example</h1>

<p>Environment: @Env.Environment</p>

Чтение среды на стороне клиента в Blazor Web App

Если предварительное создание не отключено для компонента или приложения, компонент в .Client проекте предварительно отображается на сервере. Так как сервер не имеет зарегистрированной IWebAssemblyHostEnvironment службы, невозможно внедрить службу и использовать методы расширения и свойства среды узла реализации службы во время предварительной подготовки сервера. Внедрение службы в интерактивный компонент WebAssembly или Interactive Auto приводит к следующей ошибке среды выполнения:

There is no registered service of type 'Microsoft.AspNetCore.Components.WebAssembly.Hosting.IWebAssemblyHostEnvironment'.

Чтобы устранить эту проблему, создайте пользовательскую реализацию службы для IWebAssemblyHostEnvironment на сервере. Дополнительную информацию и пример реализации см. в разделе "Реализация пользовательской службы на сервере" статьи о предварительной отрисовке, которая находится далее в Blazor документации.

Чтение клиентской среды во время запуска

Во время запуска WebAssemblyHostBuilder выставляет IWebAssemblyHostEnvironment через свойство HostEnvironment, которое обеспечивает логику, специфичную для среды, в коде построителя узлов.

В файле Program:

if (builder.HostEnvironment.Environment == "Custom")
{
    ...
};

Следующие удобные методы расширения, предоставляемые через WebAssemblyHostEnvironmentExtensions, позволяют проверять текущую среду на наличие Development, Production, Staging и пользовательских названий сред.

В файле Program:

if (builder.HostEnvironment.IsStaging())
{
    ...
};

if (builder.HostEnvironment.IsEnvironment("Custom"))
{
    ...
};

Свойство IWebAssemblyHostEnvironment.BaseAddress можно использовать во время запуска, если NavigationManager служба недоступна.

Дополнительные ресурсы