Compartir a través de


entornos de ASP.NET Core Blazor

Nota:

Esta no es la versión más reciente de este artículo. Para la versión actual, consulte la versión de .NET 10 de este artículo.

Advertencia

Esta versión de ASP.NET Core ya no se admite. Para más información, consulte la directiva de soporte técnico de .NET y .NET Core. Para la versión actual, consulte la versión de .NET 9 de este artículo.

En este artículo se explica cómo configurar y leer el entorno en una Blazor aplicación.

Cuando se ejecuta una aplicación localmente, el entorno tiene Developmentcomo valor predeterminado . Cuando se publica la aplicación, el entorno tiene Productioncomo valor predeterminado .

Se recomiendan las convenciones siguientes:

  • Use siempre el nombre del entorno "Development" para el desarrollo local. Esto se debe a que el marco de ASP.NET Core espera exactamente ese nombre al configurar la aplicación y las herramientas para las ejecuciones de desarrollo local de una aplicación.

  • Para los entornos de prueba, almacenamiento provisional y producción, publique e implemente siempre la aplicación. Puede usar cualquier esquema de nomenclatura de entorno que desee para las aplicaciones publicadas, pero usar siempre los nombres de archivo de configuración de la aplicación con mayúsculas y minúsculas del segmento de entorno que coincida exactamente con el nombre del entorno. Para el almacenamiento provisional, use "Staging" (mayúscula "S") como nombre del entorno y asigne el nombre al archivo de configuración de la aplicación para que coincida (appsettings.Staging.json). Para producción, use "Production" (mayúscula "P") como nombre del entorno y asigne el nombre al archivo de configuración de la aplicación para que coincida (appsettings.Production.json).

Establecimiento del entorno

El entorno se establece mediante cualquiera de los métodos siguientes:

En el cliente de un Blazor Web App, el entorno se determina desde el servidor a través de un comentario HTML con el que los desarrolladores no interactúan:

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

Para una aplicación independiente Blazor WebAssembly , establezca el entorno con la <WasmApplicationEnvironmentName> propiedad MSBuild en el archivo de proyecto de la aplicación (.csproj). En el siguiente ejemplo se configura el entorno Staging.

<WasmApplicationEnvironmentName>Staging</WasmApplicationEnvironmentName>

Los entornos predeterminados son Development para la compilación y Production para la publicación.

Hay varios enfoques para establecer el entorno en una aplicación independiente Blazor WebAssembly durante las operaciones de compilación o publicación y un enfoque para que una aplicación se inicie o ejecute en el cliente:

  • Establezca el valor de la propiedad cuando se ejecuten dotnet build o dotnet publish. En el ejemplo siguiente se establece el entorno en Staging cuando se publica una aplicación:

    dotnet publish -p:WasmApplicationEnvironmentName=Staging
    
  • Establezca la propiedad durante la compilación o publicación en función de la configuración de la aplicación en Visual Studio. Los siguientes grupos de propiedades se pueden usar en el archivo de proyecto de la aplicación o en cualquier archivo de configuración de publicación (.pubxml). Agregue grupos de propiedades adicionales para otras configuraciones de compilación en uso.

    <PropertyGroup Condition="'$(Configuration)' == 'Debug'">
      <WasmApplicationEnvironmentName>Development</WasmApplicationEnvironmentName>
    </PropertyGroup>
    
    <PropertyGroup Condition="'$(Configuration)' == 'Release'">
      <WasmApplicationEnvironmentName>Production</WasmApplicationEnvironmentName>
    </PropertyGroup>
    
  • El entorno se puede establecer en función del uso de un perfil de publicación. En el ejemplo siguiente, la primera condición establece el entorno en Development cuando no se usa ningún perfil de publicación (se aplica a las operaciones de compilación y publicación sin un perfil), mientras que la segunda condición abarca el establecimiento del entorno en Production cuando se usa cualquier perfil de publicación:

    <PropertyGroup Condition="'$(PublishProfile)' == ''">
      <WasmApplicationEnvironmentName>Development</WasmApplicationEnvironmentName>
    </PropertyGroup>
    
    <PropertyGroup Condition="'$(PublishProfile)' != ''">
      <WasmApplicationEnvironmentName>Production</WasmApplicationEnvironmentName>
    </PropertyGroup>
    
  • Cree un punto de conexión personalizado de API web del lado servidor. La aplicación independiente Blazor WebAssembly solicita su entorno desde la API web en el inicio de la aplicación o a petición mientras se ejecuta. El valor debe pasarse a WebAssemblyStartOptions o con withApplicationEnvironment.

    Nota:

    Los vínculos de la documentación al origen de referencia de .NET cargan normalmente la rama predeterminada del repositorio, que representa el desarrollo actual para la próxima versión de .NET. Para seleccionar una etiqueta para una versión específica, use la lista desplegable Cambiar ramas o etiquetas . Para obtener más información, consulta Procedimientos para seleccionar una etiqueta de versión de código fuente de ASP.NET Core (dotnet/AspNetCore.Docs #26205).

En el cliente de un Blazor Web App, el entorno se determina desde el servidor a través de un middleware que comunica el entorno al explorador a través de un encabezado denominado Blazor-Environment. El encabezado establece el entorno cuando WebAssemblyHost se crea en el archivo Program del lado del cliente (WebAssemblyHostBuilder.CreateDefault).

Para una aplicación independiente Blazor WebAssembly que se ejecuta localmente, el servidor de desarrollo agrega el Blazor-Environment encabezado con el nombre de entorno obtenido del entorno de hospedaje. El entorno de hospedaje establece el entorno a partir de la variable de entorno ASPNETCORE_ENVIRONMENT establecida por el archivo Properties/launchSettings.json del proyecto. El valor predeterminado de la variable de entorno en un proyecto creado a partir de la Blazor WebAssembly plantilla de proyecto es Development. Para obtener más información, consulte la sección Establecer el entorno del lado cliente a través del encabezado .

En el cliente de una aplicación hospedada Blazor WebAssembly , el entorno se determina desde el servidor a través de un middleware que comunica el entorno al explorador a través de un encabezado denominado Blazor-Environment. El encabezado establece el entorno cuando WebAssemblyHost se crea en el archivo Program del lado del cliente (WebAssemblyHostBuilder.CreateDefault).

Para una aplicación independiente Blazor WebAssembly que se ejecuta localmente, el servidor de desarrollo agrega el Blazor-Environment encabezado con el nombre de entorno obtenido del entorno de hospedaje. El entorno de hospedaje establece el entorno a partir de la variable de entorno ASPNETCORE_ENVIRONMENT establecida por el archivo Properties/launchSettings.json del proyecto. El valor predeterminado de la variable de entorno en un proyecto creado a partir de la Blazor WebAssembly plantilla de proyecto es Development. Para obtener más información, consulte la sección Establecer el entorno del lado cliente a través del encabezado .

Para las aplicaciones que se ejecutan localmente en desarrollo, la aplicación utiliza por defecto el entorno Development. Al publicar la aplicación, el entorno predeterminado será Production.

Para obtener instrucciones generales sobre la configuración de aplicaciones en ASP.NET Core, consulte entornos de ejecución de ASP.NET Core. Para la configuración de aplicaciones del lado del servidor con archivos estáticos en entornos distintos del entorno Development durante el desarrollo y las pruebas (por ejemplo, Staging), consulte los Archivos estáticos en ASP.NET Core.

Establecimiento del entorno del lado cliente mediante la configuración de inicio de Blazor

El siguiente ejemplo inicia Blazor en el entorno Staging si el nombre del host incluye localhost. De lo contrario, el entorno se establece en su valor predeterminado.

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>

En el ejemplo anterior, el marcador de posición {BLAZOR SCRIPT} representa la ruta de acceso del script y Blazor el nombre del archivo. Para obtener la ubicación del script, consulte la estructura del proyecto ASP.NET CoreBlazor.

Nota:

Para Blazor Web App que establecen la webAssembly>environment propiedad en la configuración de Blazor.start, es aconsejable que el entorno del lado del servidor coincida con el entorno establecido en la propiedad environment. De lo contrario, la representación previa en el servidor funciona en un entorno diferente al de la representación en el cliente, lo que produce efectos arbitrarios. Para obtener instrucciones generales sobre cómo establecer el entorno para un Blazor Web App, consulte entornos de tiempo de ejecución de ASP.NET Core.

Blazor WebAssembly independiente:

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

En el ejemplo anterior, el marcador de posición {BLAZOR SCRIPT} representa la ruta de acceso del script y Blazor el nombre del archivo. Para obtener la ubicación del script, consulte la estructura del proyecto ASP.NET CoreBlazor.

El uso de la environment propiedad invalida el entorno establecido por el Blazor-Environment encabezado .

El enfoque anterior establece el entorno del cliente sin cambiar el valor del encabezado Blazor-Environment, ni modifica el valor del registro de consola del proyecto de servidor del entorno de inicio para un Blazor Web App que ha adoptado el renderizado interactivo global de WebAssembly.

Para registrar el entorno en la consola en una aplicación independiente Blazor WebAssembly o en el proyecto .Client de Blazor Web App, coloque el siguiente código de C# en el archivo Program después de crear WebAssemblyHost con WebAssemblyHostBuilder.CreateDefault y antes de la línea que compila y ejecuta el proyecto (await builder.Build().RunAsync();):

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

Para más información sobre el inicio de Blazor, vea Inicio de Blazor en ASP.NET Core.

Establecimiento del entorno del lado cliente a través del encabezado

Las aplicaciones Blazor WebAssembly pueden establecer el entorno con el encabezado de Blazor-Environment. En concreto, el encabezado de respuesta debe establecerse en el _framework/blazor.boot.json archivo, pero no causa ningún problema establecer el encabezado en las respuestas del servidor de archivos para otras Blazor solicitudes de archivo o la totalidad de la implementación de Blazor.

Aunque el framework Blazor emite el nombre del encabezado en kebab case con mayúsculas y minúsculas mixtas (Blazor-Environment), puede usar kebab case con todas minúsculas o todas mayúsculas (blazor-environment, BLAZOR-ENVIRONMENT).

Para las ejecuciones de desarrollo local con el servidor de desarrollo integrado Blazor, puede controlar el valor del encabezado Blazor-Environment estableciendo el valor de la variable de entorno ASPNETCORE_ENVIRONMENT en el archivo del propuesta de valor proyecto Properties/launchSettings.json. Cuando se ejecuta localmente con el servidor de desarrollo, el orden de prioridad para determinar el entorno de la aplicación es Blazor.start configuración (environment clave)>Blazor-Environment encabezado de respuesta (blazor.boot.json archivo) >ASPNETCORE_ENVIRONMENT variable de entorno (launchSettings.json). No puedes usar el enfoque de la variable de entorno ASPNETCORE_ENVIRONMENT (launchSettings.json) para una aplicación implementada Blazor WebAssembly. La técnica solo funciona con el servidor de desarrollo en ejecuciones locales de la aplicación.

IIS

En el ejemplo siguiente de IIS, el encabezado personalizado (Blazor-Environment) se agrega al archivo publicado web.config . El web.config archivo se encuentra en la bin/Release/{TARGET FRAMEWORK}/publish carpeta , donde el {TARGET FRAMEWORK} marcador de posición es el marco de destino:

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

Nota:

Para usar un archivo personalizado web.config para IIS que no se sobrescribe cuando la aplicación se publica en la publish carpeta, consulte Hospedaje e implementación de ASP.NET Core Blazor WebAssembly con IIS.

Nginx

En el caso de los servidores Nginx, use la directiva add_header de ngx_http_headers_module:

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

Para obtener más información, consulte los siguientes recursos:

Apache

En el caso de los servidores Apache, use la Header directiva del mod_headers módulo :

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

Para obtener más información, consulte los siguientes recursos:

Establecimiento del entorno para Azure App Service

Para una aplicación independiente Blazor WebAssembly , puede establecer el entorno manualmente a través de la configuración de inicio o el Blazor-Environment encabezado.

Para una aplicación del lado servidor, establezca el entorno a través de una ASPNETCORE_ENVIRONMENT configuración de aplicación en Azure:

  1. Confirme que el uso de mayúsculas y minúsculas de los segmentos del entorno en los nombres de archivo de la configuración de la aplicación coincida exactamente con el uso de mayúsculas y minúsculas del nombre de su entorno Por ejemplo, el nombre de archivo de configuración de la aplicación coincidente para el Staging entorno es appsettings.Staging.json. Si el nombre de archivo es appsettings.staging.json (en minúsculas "s"), el archivo no se encuentra y la configuración del archivo no se usa en el Staging entorno.

  2. Para la implementación de Visual Studio, confirme que la aplicación está implementada en la ranura de implementación correcta. Para una aplicación denominada BlazorAzureAppSample, la aplicación se implementa en la Staging ranura de implementación.

  3. En la Azure Portal para la ranura de implementación del entorno, establezca el entorno con la configuración de la aplicación ASPNETCORE_ENVIRONMENT. Para una aplicación denominada BlazorAzureAppSample, el espacio de App Service se denomina BlazorAzureAppSample/Staging. Para la configuración del slot Staging, cree una configuración de aplicación para ASPNETCORE_ENVIRONMENT con un valor de Staging. La configuración de la ranura de implementación está habilitada para la configuración.

Cuando se solicita en un explorador, la aplicación BlazorAzureAppSample/Staging se carga en el entorno Staging en https://blazorazureappsample-staging.azurewebsites.net.

Cuando la aplicación se carga en el explorador, la colección de encabezados de respuesta para blazor.boot.json indica que el valor del Blazor-Environment encabezado es Staging.

La aplicación carga la configuración de la aplicación del archivo appsettings.{ENVIRONMENT}.json, donde el marcador de posición {ENVIRONMENT} es el entorno de la aplicación. En el ejemplo anterior, se carga la configuración del appsettings.Staging.json archivo.

Lectura del entorno en una aplicación Blazor WebAssembly

Obtenga el entorno de la aplicación en un componente inyectando IWebAssemblyHostEnvironment y leyendo la propiedad Environment.

ReadEnvironment.razor:

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

<h1>Environment example</h1>

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

Leer el entorno en el lado del cliente en Blazor Web App

Suponiendo que la representación previa no está deshabilitada para un componente o la aplicación, un componente del .Client proyecto se representa previamente en el servidor. Dado que el servidor no tiene un servicio registrado IWebAssemblyHostEnvironment , no es posible insertar el servicio y usar los métodos y propiedades de extensión de entorno de host de la implementación del servicio durante la representación previa del servidor. La inserción del servicio en un componente Interactivo webAssembly o Interactive Auto produce el siguiente error en tiempo de ejecución:

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

Para solucionar este problema, cree una implementación de servicio personalizada para IWebAssemblyHostEnvironment en el servidor. Para obtener más información y una implementación de ejemplo, consulte la sección Implementación de servicios personalizados en la sección servidor del artículo Representación previa , que aparece más adelante en la Blazor documentación.

Lectura del entorno del lado cliente durante el inicio

Durante el inicio, WebAssemblyHostBuilder expone la IWebAssemblyHostEnvironment a través de la propiedad HostEnvironment, lo que habilita una lógica específica del entorno en el código del generador de host.

En el archivo Program:

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

Los siguientes métodos de extensión de conveniencia proporcionados mediante WebAssemblyHostEnvironmentExtensions permiten comprobar el entorno actual para Development, Production, Staging y nombres de entorno personalizados:

En el archivo Program:

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

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

La IWebAssemblyHostEnvironment.BaseAddress propiedad se puede usar durante el inicio cuando el NavigationManager servicio no está disponible.

Recursos adicionales