Среды ASP.NET Core Blazor
Примечание.
Это не последняя версия этой статьи. В текущем выпуске см . версию .NET 8 этой статьи.
Предупреждение
Эта версия ASP.NET Core больше не поддерживается. Дополнительные сведения см. в статье о политике поддержки .NET и .NET Core. В текущем выпуске см . версию .NET 8 этой статьи.
Внимание
Эта информация относится к предварительному выпуску продукта, который может быть существенно изменен до его коммерческого выпуска. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
В текущем выпуске см . версию .NET 8 этой статьи.
В этой статье объясняется, как настроить и прочитать среду в Blazor приложении.
При локальном запуске приложения среда по умолчанию имеет значение Development
. При публикации приложения среда по умолчанию имеет значение Production
.
Рекомендуется использовать следующие соглашения:
Всегда используйте имя среды "
Development
" для локальной разработки. Это связано с тем, что платформа ASP.NET Core ожидает именно это имя при настройке приложения и инструментов для локальных запусков разработки приложения.Для тестирования, промежуточной и рабочей среды всегда публикуйте и развертывайте приложение. Вы можете использовать любую схему именования среды, которую вы хотите использовать для опубликованных приложений, но всегда используйте имена файлов параметров приложения с регистром сегмента среды, который точно соответствует имени среды. Для промежуточного выполнения используйте "
Staging
" ("S" ("") в качестве имени среды и присвойте файлу параметров приложения для сопоставления (appsettings.Staging.json
). Для рабочей среды используйте "Production
" ("" ("P") в качестве имени среды и назовите файл параметров приложения для сопоставления (appsettings.Production.json
).
Указание среды
Для задания среды можно использовать любой из следующих подходов:
- Blazor Web App: используйте любой из подходов, описанных в разделе "Использование нескольких сред в ASP.NET Core " для общих приложений ASP.NET Core.
- Blazor Web App или автономный Blazor WebAssembly: Blazor начальная конфигурация
- Автономный Blazor WebAssembly:
blazor-environment
заголовок - Blazor Web Appили автономная Blazor WebAssemblyслужба: приложение Azure
На клиенте для Blazor Web Appклиента среда определяется с сервера с помощью по промежуточного слоя, которое передает среду в браузер через заголовок с именем blazor-environment
. Заголовок задает среду при WebAssemblyHost создании в клиентском Program
файле (WebAssemblyHostBuilder.CreateDefault).
Для задания среды можно использовать любой из следующих подходов:
- Blazor Server: используйте любой из подходов, описанных в разделе "Использование нескольких сред в ASP.NET Core " для общих приложений ASP.NET Core.
- Blazor Server или Blazor WebAssembly: Blazor начальная конфигурация
- Blazor WebAssembly:
blazor-environment
заголовок - Blazor Serverили Blazor WebAssembly: служба приложение Azure
На клиенте или Blazor Web App клиенте размещенного Blazor WebAssembly приложения среда определяется с сервера с помощью по промежуточного слоя, которое передает среду в браузер через заголовок с именем blazor-environment
. Заголовок задает среду при WebAssemblyHost создании в клиентском Program
файле (WebAssemblyHostBuilder.CreateDefault).
Для автономного Blazor WebAssembly приложения, работающего локально, сервер разработки добавляет blazor-environment
заголовок.
Для локального запуска приложения в разработке приложение по умолчанию использует Development
среду. Публикация приложения по умолчанию использует среду Production
.
Общие рекомендации по настройке приложений ASP.NET Core см. в разделе "Использование нескольких сред в ASP.NET Core". Сведения о конфигурации приложений на стороне сервера со статическими файлами в средах, отличных Development от среды во время разработки и тестирования (например, Stagingсм. в разделе ASP.NET Статические файлы CoreBlazor.
Настройка клиентской среды с помощью 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 Структура проекта CoreBlazor.
Примечание.
Для 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 Структура проекта CoreBlazor.
Использование свойства 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
.
В приведенном ниже примере для служб 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.
Blazor Хотя платформа выдает имя заголовка во всех строчных буквах (blazor-environment
), вы можете использовать любой нужный регистр. Например, имя заголовка, которое прописывает каждое слово (Blazor-Environment
) поддерживается.
Задание среды для Службы приложений Azure
Для автономного Blazor WebAssembly приложения можно вручную задать среду с помощью конфигурации запуска или заголовкаblazor-environment
.
Для серверного приложения настройте среду с помощью ASPNETCORE_ENVIRONMENT
параметра приложения в Azure:
Убедитесь, что регистр сегментов среды в именах файлов параметров приложения точно совпадают с регистром имени среды. Например, совпадающее имя файла параметров приложения для
Staging
средыappsettings.Staging.json
. Если имя файла —appsettings.staging.json
(строчная буква "s
"), файл не расположен, а параметры в файле не используются вStaging
среде.Для развертывания Visual Studio убедитесь, что приложение развернуто в нужном слоте. Для приложения с именем
BlazorAzureAppSample
приложение развертывается в слоте развертыванияStaging
.На портале 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 сервере. Добавьте следующий класс в серверный проект.
ServerHostEnvironment.cs
:
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Microsoft.AspNetCore.Components;
public class ServerHostEnvironment(IWebHostEnvironment env, NavigationManager nav) :
IWebAssemblyHostEnvironment
{
public string Environment => env.EnvironmentName;
public string BaseAddress => nav.BaseUri;
}
В файле проекта Program
сервера зарегистрируйте службу:
builder.Services.TryAddScoped<IWebAssemblyHostEnvironment, ServerHostEnvironment>();
На этом этапе IWebAssemblyHostEnvironment служба может быть внедрена в интерактивный веб-компонент WebAssembly или интерактивный автоматический компонент и использоваться, как показано в разделе "Чтение среды" в Blazor WebAssembly разделе приложения .
В предыдущем примере можно продемонстрировать, что можно иметь другую серверную среду, отличную от клиентской среды, которая не рекомендуется и может привести к произвольным результатам. При настройке среды в среде Blazor Web Appлучше всего соответствовать средам сервера и .Client
проекта. Рассмотрим следующий сценарий в тестовом приложении:
- Реализуйте свойство среды на стороне
webassembly
Staging
клиента с помощьюBlazor.start
среды. Пример см. в разделе "Настройка клиентской среды" с помощью раздела конфигурации запуска. - Не изменяйте файл на стороне
Properties/launchSettings.json
сервера.environmentVariables
Оставьте раздел переменнойASPNETCORE_ENVIRONMENT
среды, в которой задано значениеDevelopment
.
Вы можете увидеть значение IWebAssemblyHostEnvironment.Environment изменения свойства в пользовательском интерфейсе.
При предварительной подготовке на сервере компонент отображается в Development
среде:
Environment: Development
Когда компонент переназначен всего за секунду или два позже, после Blazor скачивания пакета и активации среды выполнения .NET WebAssembly значения изменяются, чтобы отразить, что клиент работает в Staging
среде на клиенте:
Environment: Staging
В предыдущем примере показано, почему мы рекомендуем настроить среду сервера для сопоставления клиентской среды для разработки, тестирования и производственных развертываний.
Дополнительные сведения см. в статье о режимах отрисовки на стороне клиента, которая отображается далее в 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 недоступна.
Дополнительные ресурсы
ASP.NET Core