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


ASP.NET Core Blazor средах

Примечание.

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

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

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

Это важно

Эта информация относится к предварительному выпуску продукта, который может быть существенно изменен до его коммерческого выпуска. Корпорация Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых в отношении информации, предоставленной здесь.

Для текущего релиза смотрите версию .NET 9 этой статьи.

В этой статье объясняется, как настроить и прочитать среду в 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> свойством в файле проекта приложения (.csproj). Следующий пример задает Staging среду:

<WasmApplicationEnvironmentName>Staging</WasmApplicationEnvironmentName>

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

На клиенте для 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 служба недоступна.

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