Evento
Campionato do Mundo de Power BI DataViz
Feb 14, 4 PM - Mar 31, 4 PM
Con 4 posibilidades de entrar, poderías gañar un paquete de conferencias e facelo ao Live Grand Finale en Las Vegas
Máis informaciónEste explorador xa non é compatible.
Actualice a Microsoft Edge para dispoñer das funcionalidades máis recentes, as actualizacións de seguranza e a asistencia técnica.
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 9 de este artículo.
Aviso
Esta versión de ASP.NET Core ya no se admite. Para obtener más información, consulte la directiva de compatibilidad de .NET y .NET Core. Para la versión actual, consulte la versión de .NET 9 de este artículo.
Importante
Esta información hace referencia a un producto en versión preliminar, el cual puede sufrir importantes modificaciones antes de que se publique la versión comercial. Microsoft no proporciona ninguna garantía, expresa o implícita, con respecto a la información proporcionada aquí.
Para la versión actual, consulte la versión de .NET 9 de este artículo.
En este artículo se proporciona información sobre el uso del host genérico de .NET en ASP.NET Core.
Las plantillas de ASP.NET Core crean un objeto WebApplicationBuilder y un objeto WebApplication, que proporcionan una forma agilizada de configurar y ejecutar aplicaciones web sin una clase Startup
. Para más información sobre WebApplicationBuilder
y WebApplication
, consulte WebApplicationBuilder
.
Para información sobre cómo usar el host genérico de .NET en aplicaciones de consola, consulte Host genérico de .NET.
El host es un objeto que encapsula todos los recursos de la aplicación, como:
IHostedService
Cuando se inicia un host, llama a IHostedService.StartAsync en cada implementación de IHostedService registrada en la colección de servicios hospedados del contenedor de servicios. En una aplicación web, una de las implementaciones de IHostedService
es un servicio web que inicia una IHostedService
.
Incluir todos los recursos interdependientes de la aplicación en un objeto permite controlar el inicio de la aplicación y apagado estable.
Normalmente, el código de la clase Program.cs
configura, compila y ejecuta el host. El código siguiente crea un host con una implementación de IHostedService
agregada al contenedor de DI.
await Host.CreateDefaultBuilder(args)
.ConfigureServices(services =>
{
services.AddHostedService<SampleHostedService>();
})
.Build()
.RunAsync();
Para una carga de trabajo HTTP, llame a ConfigureWebHostDefaults después de CreateDefaultBuilder:
await Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.Build()
.RunAsync();
El método CreateDefaultBuilder realiza las acciones siguientes:
DOTNET_
.appsettings.json
.appsettings.{Environment}.json
.Development
.El método ConfigureWebHostDefaults realiza las acciones siguientes:
ASPNETCORE_
.ASPNETCORE_FORWARDEDHEADERS_ENABLED
es igual a true
.En las secciones Configuración para todos los tipos de aplicaciones y Configuración para las aplicaciones web, más adelante en este artículo, se muestra cómo invalidar la configuración predeterminada del generador.
Los servicios siguientes se registran de forma automática:
Para más información sobre los servicios proporcionados por el marco, consulte Inserción de dependencias en ASP.NET Core.
Permite insertar el servicio IHostApplicationLifetime (anteriormente, IApplicationLifetime
) en cualquier clase para controlar las tareas posteriores al inicio y el cierre estable. Tres de las propiedades de la interfaz son tokens de cancelación que se usan para registrar los métodos del controlador de eventos de inicio y detención de las aplicaciones. La interfaz también incluye un método StopApplication
, que permite a las aplicaciones solicitar un apagado estable.
Al realizar un apagado estable, el host:
El ejemplo siguiente es una implementación de IHostedService
que registra los controladores de eventos IHostApplicationLifetime
:
public class HostApplicationLifetimeEventsHostedService : IHostedService
{
private readonly IHostApplicationLifetime _hostApplicationLifetime;
public HostApplicationLifetimeEventsHostedService(
IHostApplicationLifetime hostApplicationLifetime)
=> _hostApplicationLifetime = hostApplicationLifetime;
public Task StartAsync(CancellationToken cancellationToken)
{
_hostApplicationLifetime.ApplicationStarted.Register(OnStarted);
_hostApplicationLifetime.ApplicationStopping.Register(OnStopping);
_hostApplicationLifetime.ApplicationStopped.Register(OnStopped);
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
=> Task.CompletedTask;
private void OnStarted()
{
// ...
}
private void OnStopping()
{
// ...
}
private void OnStopped()
{
// ...
}
}
La implementación de IHostLifetime controla cuándo se inicia el host y cuándo se detiene. Se usa la última implementación registrada.
Microsoft.Extensions.Hosting.Internal.ConsoleLifetime
es la implementación predeterminada de IHostLifetime
. ConsoleLifetime
:
Permite insertar el servicio IHostEnvironment en una clase para obtener información sobre los valores siguientes:
Las aplicaciones web implementan la interfaz IWebHostEnvironment
, que hereda IHostEnvironment
y agrega IWebHostEnvironment
.
La configuración de host se usa para las propiedades de la implementación de IHostEnvironment.
La configuración del host está disponible desde HostBuilderContext.Configuration dentro de ConfigureAppConfiguration. Después de ConfigureAppConfiguration
, HostBuilderContext.Configuration
se reemplaza por la configuración de la aplicación.
Para agregar la configuración de host, llame a ConfigureHostConfiguration en IHostBuilder
. Se puede llamar varias veces a ConfigureHostConfiguration
con resultados de suma. El host usa cualquier opción que establezca un valor en último lugar en una clave determinada.
El proveedor de variables de entorno con el prefijo DOTNET_
y los argumentos de línea de comandos se incluyen mediante CreateDefaultBuilder
. Para las aplicaciones web, se agrega el proveedor de variables de entorno con el prefijo ASPNETCORE_
. El prefijo se quita cuando se leen las variables de entorno. Por ejemplo, el valor de la variable de entorno de ASPNETCORE_ENVIRONMENT
se convierte en el valor de configuración de host de la clave environment
.
En el ejemplo siguiente se crea la configuración de host:
Host.CreateDefaultBuilder(args)
.ConfigureHostConfiguration(hostConfig =>
{
hostConfig.SetBasePath(Directory.GetCurrentDirectory());
hostConfig.AddJsonFile("hostsettings.json", optional: true);
hostConfig.AddEnvironmentVariables(prefix: "PREFIX_");
hostConfig.AddCommandLine(args);
});
La configuración de la aplicación se crea llamando a ConfigureAppConfiguration en IHostBuilder
. Se puede llamar varias veces a ConfigureAppConfiguration
con resultados de suma. La aplicación usa cualquier opción que establezca un valor en último lugar en una clave determinada.
La configuración creada por ConfigureAppConfiguration
está disponible en HostBuilderContext.Configuration para las operaciones posteriores y como servicio desde DI. La configuración de host también se agrega a la configuración de la aplicación.
Para más información, consulte Configuración en ASP.NET Core.
En esta sección se enumeran las configuraciones de host que se aplican a las cargas de trabajo HTTP y no HTTP. De forma predeterminada, las variables de entorno que se usan para configurar estas opciones pueden tener un prefijo DOTNET_
o ASPNETCORE_
, que aparece en la siguiente lista de valores como marcador de posición {PREFIX_}
. Para más información, consulte la sección Configuración predeterminada del compilador y Configuración: variables de entorno.
La propiedad IHostEnvironment.ApplicationName se establece a partir de la configuración de host durante la construcción de este.
Clave: applicationName
Tipo: string
Predeterminado: nombre del ensamblado que contiene el punto de entrada de la aplicación.
Variable de entorno: {PREFIX_}APPLICATIONNAME
Para establecer este valor, use la variable de entorno.
La propiedad IHostEnvironment.ContentRootPath determina dónde el host comienza a buscar archivos de contenido. Si no existe la ruta de acceso, el host no se puede iniciar.
Clave: contentRoot
Tipo: string
Predeterminado: carpeta donde se encuentra el ensamblado de la aplicación.
Variable de entorno: {PREFIX_}CONTENTROOT
Para establecer este valor, use la variable de entorno o llame a UseContentRoot
en IHostBuilder
:
Host.CreateDefaultBuilder(args)
.UseContentRoot("/path/to/content/root")
// ...
Para obtener más información, consulte:
La propiedad IHostEnvironment.EnvironmentName se puede establecer en cualquier valor. Los valores definidos por el marco son Development
, Staging
y Production
. Los valores no distinguen mayúsculas de minúsculas.
Clave: environment
Tipo: string
Predeterminado:Production
Variable de entorno: {PREFIX_}ENVIRONMENT
Para establecer este valor, use la variable de entorno o llame a UseEnvironment
en IHostBuilder
:
Host.CreateDefaultBuilder(args)
.UseEnvironment("Development")
// ...
HostOptions.ShutdownTimeout establece el tiempo de espera para StopAsync. El valor predeterminado es 30 segundos. Durante el período de tiempo de espera, el host:
Si el período de tiempo de espera expira antes de que todos los servicios hospedados se hayan detenido, los servicios activos que queden se detendrán cuando se cierre la aplicación. Los servicios se detienen aun cuando no hayan terminado de procesarse. Si los servicios requieren más tiempo para detenerse, aumente el tiempo de espera.
Clave: shutdownTimeoutSeconds
Tipo: int
Valor predeterminado: 30 segundos
Variable de entorno: {PREFIX_}SHUTDOWNTIMEOUTSECONDS
Para establecer este valor, use la variable de entorno o configure HostOptions
. El siguiente ejemplo establece el tiempo de espera en 20 segundos:
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.Configure<HostOptions>(options =>
{
options.ShutdownTimeout = TimeSpan.FromSeconds(20);
});
});
De manera predeterminada, appsettings.json
y appsettings.{Environment}.json
se recargan cuando cambia el archivo. Para deshabilitar este comportamiento de recarga en ASP.NET Core 5.0 o versiones posteriores, establezca la clave hostBuilder:reloadConfigOnChange
en false
.
Clave: hostBuilder:reloadConfigOnChange
Escriba: bool
(true
o false
)
Predeterminado:true
Argumento de la línea de comandos: hostBuilder:reloadConfigOnChange
Variable de entorno: {PREFIX_}hostBuilder:reloadConfigOnChange
Aviso
El separador de dos puntos (:
) no funciona con las claves jerárquicas de variables de entorno en todas las plataformas. Para más información, consulte Variables de entorno.
Algunas configuraciones de host solo se aplican a las cargas de trabajo HTTP. De forma predeterminada, las variables de entorno que se usan para configurar estas opciones pueden tener un prefijo DOTNET_
o ASPNETCORE_
, que aparece en la siguiente lista de valores como marcador de posición {PREFIX_}
.
Los métodos de extensión en IWebHostBuilder
están disponibles para estas configuraciones. Los ejemplos de código que muestran cómo llamar a los métodos de extensión suponen que webBuilder
es una instancia de IWebHostBuilder
, como en el ejemplo siguiente:
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
// ...
});
Cuando es false
, los errores durante el inicio provocan la salida del host. Cuando es true
, el host captura las excepciones producidas durante el inicio e intenta iniciar el servidor.
Clave: captureStartupErrors
Escriba: bool
(true
/1
o false
/0
)
Valor predeterminado: false
, a menos que la aplicación se ejecute con Kestrel detrás de IIS, en cuyo caso el valor predeterminado es true
.
Variable de entorno: {PREFIX_}CAPTURESTARTUPERRORS
Para establecer este valor, utilice la configuración o llame a CaptureStartupErrors
:
webBuilder.CaptureStartupErrors(true);
Si se habilita, o si el entorno es Development
, la aplicación captura errores detallados.
Clave: detailedErrors
Escriba: bool
(true
/1
o false
/0
)
Predeterminado:false
Variable de entorno: {PREFIX_}DETAILEDERRORS
Para establecer este valor, utilice la configuración o llame a UseSetting
:
webBuilder.UseSetting(WebHostDefaults.DetailedErrorsKey, "true");
Una cadena delimitada por punto y coma de ensamblados de inicio de hospedaje para cargar en el inicio. Aunque el valor de configuración predeterminado es una cadena vacía, los ensamblados de inicio de hospedaje incluyen siempre el ensamblado de la aplicación. Cuando se especifican los ensamblados de inicio de hospedaje, estos se agregan al ensamblado de la aplicación para que se carguen cuando la aplicación genera sus servicios comunes durante el inicio.
Clave: hostingStartupAssemblies
Tipo: string
Predeterminado: Cadena vacía
Variable de entorno: {PREFIX_}HOSTINGSTARTUPASSEMBLIES
Para establecer este valor, utilice la configuración o llame a UseSetting
:
webBuilder.UseSetting(
WebHostDefaults.HostingStartupAssembliesKey, "assembly1;assembly2");
Una cadena delimitada por punto y coma de ensamblados de inicio de hospedaje para excluir en el inicio.
Clave: hostingStartupExcludeAssemblies
Tipo: string
Predeterminado: Cadena vacía
Variable de entorno: {PREFIX_}HOSTINGSTARTUPEXCLUDEASSEMBLIES
Para establecer este valor, utilice la configuración o llame a UseSetting
:
webBuilder.UseSetting(
WebHostDefaults.HostingStartupExcludeAssembliesKey, "assembly1;assembly2");
Establece el puerto HTTPS al que redirigir si obtienes una conexión que no es HTTPS. Se usa en Exigir HTTPS. Esta configuración no hace que el servidor escuche en el puerto especificado. Es decir, es posible redirigir accidentalmente las solicitudes a un puerto sin usar.
Clave: https_port
Tipo: string
Predeterminado: no se ha establecido ningún valor predeterminado.
Variable de entorno: {PREFIX_}HTTPS_PORT
Para establecer este valor, utilice la configuración o llame a UseSetting
:
webBuilder.UseSetting("https_port", "8080");
Los puertos en los que escuchar para conexiones HTTPS.
Clave: https_ports
Tipo: string
Predeterminado: no se ha establecido ningún valor predeterminado.
Variable de entorno: {PREFIX_}HTTPS_PORTS
Para establecer este valor, utilice la configuración o llame a UseSetting
:
webBuilder.UseSetting("https_ports", "8080");
Indica si el host debe escuchar en las direcciones URL configuradas con IWebHostBuilder
en lugar de las que están configuradas con la implementación de IServer
.
Clave: preferHostingUrls
Escriba: bool
(true
/1
o false
/0
)
Predeterminado:false
Variable de entorno: {PREFIX_}PREFERHOSTINGURLS
Para establecer este valor, use la variable de entorno o llame a PreferHostingUrls
:
webBuilder.PreferHostingUrls(true);
Impide la carga automática de los ensamblados de inicio de hospedaje, incluidos los configurados por el ensamblado de la aplicación. Para más información, consulte Uso de ensamblados de inicio de hospedaje en ASP.NET Core.
Clave: preventHostingStartup
Escriba: bool
(true
/1
o false
/0
)
Predeterminado:false
Variable de entorno: {PREFIX_}PREVENTHOSTINGSTARTUP
Para establecer este valor, use la variable de entorno o llame a UseSetting
:
webBuilder.UseSetting(WebHostDefaults.PreventHostingStartupKey, "true");
Ensamblado en el que se va a buscar la clase Startup
.
Clave: startupAssembly
Tipo: string
Predeterminado: el ensamblado de la aplicación
Variable de entorno: {PREFIX_}STARTUPASSEMBLY
Para establecer este valor, use la variable de entorno o llame a UseStartup
. UseStartup
puede tomar un nombre del ensamblado (string
) o un tipo (TStartup
). Si se llama a varios métodos UseStartup
, la última llamada tiene prioridad.
webBuilder.UseStartup("StartupAssemblyName");
webBuilder.UseStartup<Startup>();
Cuando se habilita, suprime los mensajes de estado de inicio de hospedaje.
Clave: suppressStatusMessages
Escriba: bool
(true
/1
o false
/0
)
Predeterminado:false
Variable de entorno: {PREFIX_}SUPPRESSSTATUSMESSAGES
Para establecer este valor, utilice la configuración o llame a UseSetting
:
webBuilder.UseSetting(WebHostDefaults.SuppressStatusMessagesKey, "true");
Lista delimitada por punto y coma de las direcciones IP o las direcciones de host con los puertos y protocolos en los que el servidor debe escuchar las solicitudes. Por ejemplo: http://localhost:123
. Use "*" para indicar que el servidor debe escuchar las solicitudes en cualquier dirección IP o nombre de host usando el puerto y el protocolo especificados (por ejemplo, http://*:5000
). El protocolo (http://
o https://
) debe incluirse con cada dirección URL. Los formatos admitidos varían de un servidor a otro.
Clave: urls
Tipo: string
Predeterminado: http://localhost:5000
y https://localhost:5001
Variable de entorno: {PREFIX_}URLS
Para establecer este valor, use la variable de entorno o llame a UseUrls
:
webBuilder.UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002");
Kestrel tiene su propia API de configuración de punto de conexión. Para obtener más información, vea Configuración de puntos de conexión para el servidor web Kestrel de ASP.NET Core.
La propiedad IWebHostEnvironment.WebRootPath determina la ruta de acceso relativa a los recursos estáticos de la aplicación. Si la ruta de acceso no existe, se utiliza un proveedor de archivos no-op.
Clave: webroot
Tipo: string
Predeterminado: De manera predeterminada, es wwwroot
. Debe existir la ruta de acceso a {raíz del contenido}/wwwroot.
Variable de entorno: {PREFIX_}WEBROOT
Para establecer este valor, use la variable de entorno o llame a UseWebRoot
en IWebHostBuilder
:
webBuilder.UseWebRoot("public");
Para obtener más información, consulte:
Llame a los métodos en la implementación de IHost creada para iniciar y detener la aplicación. Estos métodos afectan a todas las implementaciones de IHostedService registradas en el contenedor de servicios.
La diferencia entre los métodos Run*
y Start*
es que los métodos Run*
esperan a que el host se complete antes de volver, mientras que los métodos Start*
vuelven inmediatamente. Los métodos Run*
se usan normalmente en aplicaciones de consola, mientras que los métodos Start*
se usan normalmente en servicios de larga duración.
Run inicia la aplicación y bloquea el subproceso que realiza la llamada hasta que se cierre el host.
RunAsync inicia la aplicación y devuelve Task, que se completa cuando se desencadena el token de cancelación o el cierre.
RunConsoleAsync habilita la compatibilidad con la consola, compila e inicia el host y espera a que Ctrl+C/SIGINT (Windows), Ctrl+C (macOS) o SIGTERM para apagar.
Start inicia el host de forma sincrónica.
StartAsync inicia el host y devuelve Task, que se completa cuando se desencadena el token de cancelación o el cierre.
WaitForStartAsync se llama al inicio de StartAsync
, que espera hasta que se complete antes de continuar. Este método se puede usar para retrasar el inicio hasta que lo señale un evento externo.
StopAsync intenta detener el host en el tiempo de espera proporcionado.
WaitForShutdown bloquea el subproceso de llamada hasta que IHostLifetime desencadene el apagado, como a través de Ctrl+C/SIGINT (Windows), Ctrl+C (macOS) o SIGTERM.
WaitForShutdownAsync devuelve Task, que se completa cuando se desencadena el cierre a través del token determinado y llama a StopAsync.
Las plantillas de ASP.NET Core crean un host genérico de .NET Core (HostBuilder).
En este artículo se proporciona información sobre el uso del host genérico de .NET en ASP.NET Core. Para obtener información sobre cómo usar un host genérico de .NET en aplicaciones de consola, consulte Host genérico de .NET.
El host es un objeto que encapsula todos los recursos de la aplicación, como:
IHostedService
Cuando se inicia un host, llama a IHostedService.StartAsync en cada implementación de IHostedService registrada en la colección de servicios hospedados del contenedor de servicios. En una aplicación web, una de las implementaciones de IHostedService
es un servicio web que inicia una IHostedService
.
La razón principal para incluir todos los recursos interdependientes de la aplicación en un objeto es la administración de la duración: el control sobre el inicio de la aplicación y el apagado estable.
Normalmente se configura, compila y ejecuta el host por el código de la clase Program
. El método Main
realiza las acciones siguientes:
CreateHostBuilder
para crear y configurar un objeto del generador.Build
y Run
en el objeto del generador.Las plantillas web de ASP.NET Core generan el código siguiente para crear un host:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
En el código siguiente se crea una carga de trabajo que no es HTTP con una implementación de IHostedService
agregada al contenedor de DI.
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
}
Para una carga de trabajo HTTP, el método Main
es el mismo, pero CreateHostBuilder
llama a ConfigureWebHostDefaults
:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Si la aplicación usa Entity Framework Core, no cambie el nombre o la firma del método CreateHostBuilder
. Las herramientas de Entity Framework Core esperan encontrar un método CreateHostBuilder
que configure el host sin ejecutar la aplicación. Para obtener más información, consulte Creación de DbContext en tiempo de diseño.
El método CreateDefaultBuilder realiza las acciones siguientes:
DOTNET_
.appsettings.json
.appsettings.{Environment}.json
.Development
.El método ConfigureWebHostDefaults realiza las acciones siguientes:
ASPNETCORE_
.ASPNETCORE_FORWARDEDHEADERS_ENABLED
es igual a true
.En las secciones Configuración para todos los tipos de aplicaciones y Configuración para las aplicaciones web, más adelante en este artículo, se muestra cómo invalidar la configuración predeterminada del generador.
Los servicios siguientes se registran de forma automática:
Para más información sobre los servicios proporcionados por el marco, consulte Inserción de dependencias en ASP.NET Core.
Permite insertar el servicio IHostApplicationLifetime (anteriormente, IApplicationLifetime
) en cualquier clase para controlar las tareas posteriores al inicio y el cierre estable. Tres de las propiedades de la interfaz son tokens de cancelación que se usan para registrar los métodos del controlador de eventos de inicio y detención de las aplicaciones. La interfaz también incluye un método StopApplication
.
El ejemplo siguiente es una implementación de IHostedService
que registra los eventos IHostApplicationLifetime
:
internal class LifetimeEventsHostedService : IHostedService
{
private readonly ILogger _logger;
private readonly IHostApplicationLifetime _appLifetime;
public LifetimeEventsHostedService(
ILogger<LifetimeEventsHostedService> logger,
IHostApplicationLifetime appLifetime)
{
_logger = logger;
_appLifetime = appLifetime;
}
public Task StartAsync(CancellationToken cancellationToken)
{
_appLifetime.ApplicationStarted.Register(OnStarted);
_appLifetime.ApplicationStopping.Register(OnStopping);
_appLifetime.ApplicationStopped.Register(OnStopped);
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
private void OnStarted()
{
_logger.LogInformation("OnStarted has been called.");
// Perform post-startup activities here
}
private void OnStopping()
{
_logger.LogInformation("OnStopping has been called.");
// Perform on-stopping activities here
}
private void OnStopped()
{
_logger.LogInformation("OnStopped has been called.");
// Perform post-stopped activities here
}
}
La implementación de IHostLifetime controla cuándo se inicia el host y cuándo se detiene. Se usa la última implementación registrada.
Microsoft.Extensions.Hosting.Internal.ConsoleLifetime
es la implementación predeterminada de IHostLifetime
. ConsoleLifetime
:
Permite insertar el servicio IHostEnvironment en una clase para obtener información sobre los valores siguientes:
Las aplicaciones web implementan la interfaz IWebHostEnvironment
, que hereda IHostEnvironment
y agrega IWebHostEnvironment
.
La configuración de host se usa para las propiedades de la implementación de IHostEnvironment.
La configuración del host está disponible desde HostBuilderContext.Configuration dentro de ConfigureAppConfiguration. Después de ConfigureAppConfiguration
, HostBuilderContext.Configuration
se reemplaza por la configuración de la aplicación.
Para agregar la configuración de host, llame a ConfigureHostConfiguration en IHostBuilder
. Se puede llamar varias veces a ConfigureHostConfiguration
con resultados de suma. El host usa cualquier opción que establezca un valor en último lugar en una clave determinada.
El proveedor de variables de entorno con el prefijo DOTNET_
y los argumentos de línea de comandos se incluyen mediante CreateDefaultBuilder
. Para las aplicaciones web, se agrega el proveedor de variables de entorno con el prefijo ASPNETCORE_
. El prefijo se quita cuando se leen las variables de entorno. Por ejemplo, el valor de la variable de entorno de ASPNETCORE_ENVIRONMENT
se convierte en el valor de configuración de host de la clave environment
.
En el ejemplo siguiente se crea la configuración de host:
// using Microsoft.Extensions.Configuration;
Host.CreateDefaultBuilder(args)
.ConfigureHostConfiguration(configHost =>
{
configHost.SetBasePath(Directory.GetCurrentDirectory());
configHost.AddJsonFile("hostsettings.json", optional: true);
configHost.AddEnvironmentVariables(prefix: "PREFIX_");
configHost.AddCommandLine(args);
});
La configuración de la aplicación se crea llamando a ConfigureAppConfiguration en IHostBuilder
. Se puede llamar varias veces a ConfigureAppConfiguration
con resultados de suma. La aplicación usa cualquier opción que establezca un valor en último lugar en una clave determinada.
La configuración creada por ConfigureAppConfiguration
está disponible en HostBuilderContext.Configuration para las operaciones posteriores y como servicio desde DI. La configuración de host también se agrega a la configuración de la aplicación.
Para más información, consulte Configuración en ASP.NET Core.
En esta sección se enumeran las configuraciones de host que se aplican a las cargas de trabajo HTTP y no HTTP. De forma predeterminada, las variables de entorno que se usan para configurar estas opciones pueden tener un prefijo DOTNET_
o ASPNETCORE_
, que aparece en la siguiente lista de valores como marcador de posición {PREFIX_}
. Para más información, consulte la sección Configuración predeterminada del compilador y Configuración: variables de entorno.
La propiedad IHostEnvironment.ApplicationName se establece a partir de la configuración de host durante la construcción de este.
Clave: applicationName
Tipo: string
Predeterminado: nombre del ensamblado que contiene el punto de entrada de la aplicación.
Variable de entorno: {PREFIX_}APPLICATIONNAME
Para establecer este valor, use la variable de entorno.
La propiedad IHostEnvironment.ContentRootPath determina dónde el host comienza a buscar archivos de contenido. Si no existe la ruta de acceso, el host no se puede iniciar.
Clave: contentRoot
Tipo: string
Predeterminado: carpeta donde se encuentra el ensamblado de la aplicación.
Variable de entorno: {PREFIX_}CONTENTROOT
Para establecer este valor, use la variable de entorno o llame a UseContentRoot
en IHostBuilder
:
Host.CreateDefaultBuilder(args)
.UseContentRoot("c:\\content-root")
//...
Para obtener más información, consulte:
La propiedad IHostEnvironment.EnvironmentName se puede establecer en cualquier valor. Los valores definidos por el marco son Development
, Staging
y Production
. Los valores no distinguen mayúsculas de minúsculas.
Clave: environment
Tipo: string
Predeterminado:Production
Variable de entorno: {PREFIX_}ENVIRONMENT
Para establecer este valor, use la variable de entorno o llame a UseEnvironment
en IHostBuilder
:
Host.CreateDefaultBuilder(args)
.UseEnvironment("Development")
//...
HostOptions.ShutdownTimeout establece el tiempo de espera para StopAsync. El valor predeterminado es cinco segundos. Durante el período de tiempo de espera, el host:
Si el período de tiempo de espera expira antes de que todos los servicios hospedados se hayan detenido, los servicios activos que queden se detendrán cuando se cierre la aplicación. Los servicios se detienen aun cuando no hayan terminado de procesarse. Si los servicios requieren más tiempo para detenerse, aumente el tiempo de espera.
Clave: shutdownTimeoutSeconds
Tipo: int
Predeterminado: 5 segundos
Variable de entorno: {PREFIX_}SHUTDOWNTIMEOUTSECONDS
Para establecer este valor, use la variable de entorno o configure HostOptions
. El siguiente ejemplo establece el tiempo de espera en 20 segundos:
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.Configure<HostOptions>(option =>
{
option.ShutdownTimeout = System.TimeSpan.FromSeconds(20);
});
});
De manera predeterminada, appsettings.json
y appsettings.{Environment}.json
se recargan cuando cambia el archivo. Para deshabilitar este comportamiento de recarga en ASP.NET Core 5.0 o versiones posteriores, establezca la clave hostBuilder:reloadConfigOnChange
en false
.
Clave: hostBuilder:reloadConfigOnChange
Escriba: bool
(true
o false
)
Predeterminado:true
Argumento de la línea de comandos: hostBuilder:reloadConfigOnChange
Variable de entorno: {PREFIX_}hostBuilder:reloadConfigOnChange
Aviso
El separador de dos puntos (:
) no funciona con las claves jerárquicas de variables de entorno en todas las plataformas. Para más información, consulte Variables de entorno.
Algunas configuraciones de host solo se aplican a las cargas de trabajo HTTP. De forma predeterminada, las variables de entorno que se usan para configurar estas opciones pueden tener un prefijo DOTNET_
o ASPNETCORE_
, que aparece en la siguiente lista de valores como marcador de posición {PREFIX_}
.
Los métodos de extensión en IWebHostBuilder
están disponibles para estas configuraciones. Los ejemplos de código que muestran cómo llamar a los métodos de extensión suponen que webBuilder
es una instancia de IWebHostBuilder
, como en el ejemplo siguiente:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.CaptureStartupErrors(true);
webBuilder.UseStartup<Startup>();
});
Cuando es false
, los errores durante el inicio provocan la salida del host. Cuando es true
, el host captura las excepciones producidas durante el inicio e intenta iniciar el servidor.
Clave: captureStartupErrors
Escriba: bool
(true
/1
o false
/0
)
Valor predeterminado: false
, a menos que la aplicación se ejecute con Kestrel detrás de IIS, en cuyo caso el valor predeterminado es true
.
Variable de entorno: {PREFIX_}CAPTURESTARTUPERRORS
Para establecer este valor, utilice la configuración o llame a CaptureStartupErrors
:
webBuilder.CaptureStartupErrors(true);
Si se habilita, o si el entorno es Development
, la aplicación captura errores detallados.
Clave: detailedErrors
Escriba: bool
(true
/1
o false
/0
)
Predeterminado:false
Variable de entorno: {PREFIX_}DETAILEDERRORS
Para establecer este valor, utilice la configuración o llame a UseSetting
:
webBuilder.UseSetting(WebHostDefaults.DetailedErrorsKey, "true");
Una cadena delimitada por punto y coma de ensamblados de inicio de hospedaje para cargar en el inicio. Aunque el valor de configuración predeterminado es una cadena vacía, los ensamblados de inicio de hospedaje incluyen siempre el ensamblado de la aplicación. Cuando se especifican los ensamblados de inicio de hospedaje, estos se agregan al ensamblado de la aplicación para que se carguen cuando la aplicación genera sus servicios comunes durante el inicio.
Clave: hostingStartupAssemblies
Tipo: string
Predeterminado: Cadena vacía
Variable de entorno: {PREFIX_}HOSTINGSTARTUPASSEMBLIES
Para establecer este valor, utilice la configuración o llame a UseSetting
:
webBuilder.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "assembly1;assembly2");
Una cadena delimitada por punto y coma de ensamblados de inicio de hospedaje para excluir en el inicio.
Clave: hostingStartupExcludeAssemblies
Tipo: string
Predeterminado: Cadena vacía
Variable de entorno: {PREFIX_}HOSTINGSTARTUPEXCLUDEASSEMBLIES
Para establecer este valor, utilice la configuración o llame a UseSetting
:
webBuilder.UseSetting(WebHostDefaults.HostingStartupExcludeAssembliesKey, "assembly1;assembly2");
Puerto de redireccionamiento HTTPS. Se usa en Exigir HTTPS.
Clave: https_port
Tipo: string
Predeterminado: no se ha establecido ningún valor predeterminado.
Variable de entorno: {PREFIX_}HTTPS_PORT
Para establecer este valor, utilice la configuración o llame a UseSetting
:
webBuilder.UseSetting("https_port", "8080");
Indica si el host debe escuchar en las direcciones URL configuradas con IWebHostBuilder
en lugar de las que están configuradas con la implementación de IServer
.
Clave: preferHostingUrls
Escriba: bool
(true
/1
o false
/0
)
Predeterminado:false
Variable de entorno: {PREFIX_}PREFERHOSTINGURLS
Para establecer este valor, use la variable de entorno o llame a PreferHostingUrls
:
webBuilder.PreferHostingUrls(true);
Impide la carga automática de los ensamblados de inicio de hospedaje, incluidos los configurados por el ensamblado de la aplicación. Para más información, consulte Uso de ensamblados de inicio de hospedaje en ASP.NET Core.
Clave: preventHostingStartup
Escriba: bool
(true
/1
o false
/0
)
Predeterminado:false
Variable de entorno: {PREFIX_}PREVENTHOSTINGSTARTUP
Para establecer este valor, use la variable de entorno o llame a UseSetting
:
webBuilder.UseSetting(WebHostDefaults.PreventHostingStartupKey, "true");
Ensamblado en el que se va a buscar la clase Startup
.
Clave: startupAssembly
Tipo: string
Predeterminado: el ensamblado de la aplicación
Variable de entorno: {PREFIX_}STARTUPASSEMBLY
Para establecer este valor, use la variable de entorno o llame a UseStartup
. UseStartup
puede tomar un nombre del ensamblado (string
) o un tipo (TStartup
). Si se llama a varios métodos UseStartup
, la última llamada tiene prioridad.
webBuilder.UseStartup("StartupAssemblyName");
webBuilder.UseStartup<Startup>();
Cuando se habilita, suprime los mensajes de estado de inicio de hospedaje.
Clave: suppressStatusMessages
Escriba: bool
(true
/1
o false
/0
)
Predeterminado:false
Variable de entorno: {PREFIX_}SUPPRESSSTATUSMESSAGES
Para establecer este valor, utilice la configuración o llame a UseSetting
:
webBuilder.UseSetting(WebHostDefaults.SuppressStatusMessagesKey, "true");
Lista delimitada por punto y coma de las direcciones IP o las direcciones de host con los puertos y protocolos en los que el servidor debe escuchar las solicitudes. Por ejemplo: http://localhost:123
. Use "*" para indicar que el servidor debe escuchar las solicitudes en cualquier dirección IP o nombre de host usando el puerto y el protocolo especificados (por ejemplo, http://*:5000
). El protocolo (http://
o https://
) debe incluirse con cada dirección URL. Los formatos admitidos varían de un servidor a otro.
Clave: urls
Tipo: string
Predeterminado: http://localhost:5000
y https://localhost:5001
Variable de entorno: {PREFIX_}URLS
Para establecer este valor, use la variable de entorno o llame a UseUrls
:
webBuilder.UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002");
Kestrel tiene su propia API de configuración de punto de conexión. Para obtener más información, vea Configuración de puntos de conexión para el servidor web Kestrel de ASP.NET Core.
La propiedad IWebHostEnvironment.WebRootPath determina la ruta de acceso relativa a los recursos estáticos de la aplicación. Si la ruta de acceso no existe, se utiliza un proveedor de archivos no-op.
Clave: webroot
Tipo: string
Predeterminado: De manera predeterminada, es wwwroot
. Debe existir la ruta de acceso a {raíz del contenido}/wwwroot.
Variable de entorno: {PREFIX_}WEBROOT
Para establecer este valor, use la variable de entorno o llame a UseWebRoot
en IWebHostBuilder
:
webBuilder.UseWebRoot("public");
Para obtener más información, consulte:
Llame a los métodos en la implementación de IHost creada para iniciar y detener la aplicación. Estos métodos afectan a todas las implementaciones de IHostedService registradas en el contenedor de servicios.
La diferencia entre los métodos Run*
y Start*
es que los métodos Run*
esperan a que el host se complete antes de volver, mientras que los métodos Start*
vuelven inmediatamente. Los métodos Run*
se usan normalmente en aplicaciones de consola, mientras que los métodos Start*
se usan normalmente en servicios de larga duración.
Run inicia la aplicación y bloquea el subproceso que realiza la llamada hasta que se cierre el host.
RunAsync inicia la aplicación y devuelve Task, que se completa cuando se desencadena el token de cancelación o el cierre.
RunConsoleAsync habilita la compatibilidad con la consola, compila e inicia el host y espera a que Ctrl+C/SIGINT (Windows), Ctrl+C (macOS) o SIGTERM para apagar.
Start inicia el host de forma sincrónica.
StartAsync inicia el host y devuelve Task, que se completa cuando se desencadena el token de cancelación o el cierre.
WaitForStartAsync se llama al inicio de StartAsync
, que espera hasta que se complete antes de continuar. Este método se puede usar para retrasar el inicio hasta que lo señale un evento externo.
StopAsync intenta detener el host en el tiempo de espera proporcionado.
WaitForShutdown bloquea el subproceso de llamada hasta que IHostLifetime desencadene el apagado, como a través de Ctrl+C/SIGINT (Windows), Ctrl+C (macOS) o SIGTERM.
WaitForShutdownAsync devuelve Task, que se completa cuando se desencadena el cierre a través del token determinado y llama a StopAsync.
El control directo de la vigencia del host se puede lograr mediante métodos a los que se puede llamar de forma externa:
public class Program
{
private IHost _host;
public Program()
{
_host = new HostBuilder()
.Build();
}
public async Task StartAsync()
{
_host.StartAsync();
}
public async Task StopAsync()
{
using (_host)
{
await _host.StopAsync(TimeSpan.FromSeconds(5));
}
}
}
Las plantillas de ASP.NET Core crean un host genérico de .NET Core (HostBuilder).
En este artículo se proporciona información sobre el uso del host genérico de .NET en ASP.NET Core. Para obtener información sobre cómo usar un host genérico de .NET en aplicaciones de consola, consulte Host genérico de .NET.
El host es un objeto que encapsula todos los recursos de la aplicación, como:
IHostedService
Cuando se inicia un host, llama a IHostedService.StartAsync en cada implementación de IHostedService registrada en la colección de servicios hospedados del contenedor de servicios. En una aplicación web, una de las implementaciones de IHostedService
es un servicio web que inicia una IHostedService
.
La razón principal para incluir todos los recursos interdependientes de la aplicación en un objeto es la administración de la duración: el control sobre el inicio de la aplicación y el apagado estable.
Normalmente se configura, compila y ejecuta el host por el código de la clase Program
. El método Main
realiza las acciones siguientes:
CreateHostBuilder
para crear y configurar un objeto del generador.Build
y Run
en el objeto del generador.Las plantillas web de ASP.NET Core generan el código siguiente para crear un host genérico:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
En el código siguiente se crea un host genérico mediante una carga de trabajo que no es HTTP. La implementación de IHostedService
se agrega al contenedor de DI:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
}
Para una carga de trabajo HTTP, el método Main
es el mismo, pero CreateHostBuilder
llama a ConfigureWebHostDefaults
:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
El código anterior se genera con las plantillas de ASP.NET Core.
Si la aplicación usa Entity Framework Core, no cambie el nombre o la firma del método CreateHostBuilder
. Las herramientas de Entity Framework Core esperan encontrar un método CreateHostBuilder
que configure el host sin ejecutar la aplicación. Para obtener más información, consulte Creación de DbContext en tiempo de diseño.
El método CreateDefaultBuilder realiza las acciones siguientes:
DOTNET_
.appsettings.json
.appsettings.{Environment}.json
.Development
.El método ConfigureWebHostDefaults
realiza las acciones siguientes:
ASPNETCORE_
.ASPNETCORE_FORWARDEDHEADERS_ENABLED
es igual a true
.En las secciones Configuración para todos los tipos de aplicaciones y Configuración para las aplicaciones web, más adelante en este artículo, se muestra cómo invalidar la configuración predeterminada del generador.
Los servicios siguientes se registran de forma automática:
Para más información sobre los servicios proporcionados por el marco, consulte Inserción de dependencias en ASP.NET Core.
Permite insertar el servicio IHostApplicationLifetime (anteriormente, IApplicationLifetime
) en cualquier clase para controlar las tareas posteriores al inicio y el cierre estable. Tres de las propiedades de la interfaz son tokens de cancelación que se usan para registrar los métodos del controlador de eventos de inicio y detención de las aplicaciones. La interfaz también incluye un método StopApplication
.
El ejemplo siguiente es una implementación de IHostedService
que registra los eventos IHostApplicationLifetime
:
internal class LifetimeEventsHostedService : IHostedService
{
private readonly ILogger _logger;
private readonly IHostApplicationLifetime _appLifetime;
public LifetimeEventsHostedService(
ILogger<LifetimeEventsHostedService> logger,
IHostApplicationLifetime appLifetime)
{
_logger = logger;
_appLifetime = appLifetime;
}
public Task StartAsync(CancellationToken cancellationToken)
{
_appLifetime.ApplicationStarted.Register(OnStarted);
_appLifetime.ApplicationStopping.Register(OnStopping);
_appLifetime.ApplicationStopped.Register(OnStopped);
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
private void OnStarted()
{
_logger.LogInformation("OnStarted has been called.");
// Perform post-startup activities here
}
private void OnStopping()
{
_logger.LogInformation("OnStopping has been called.");
// Perform on-stopping activities here
}
private void OnStopped()
{
_logger.LogInformation("OnStopped has been called.");
// Perform post-stopped activities here
}
}
La implementación de IHostLifetime controla cuándo se inicia el host y cuándo se detiene. Se usa la última implementación registrada.
Microsoft.Extensions.Hosting.Internal.ConsoleLifetime
es la implementación predeterminada de IHostLifetime
. ConsoleLifetime
:
Permite insertar el servicio IHostEnvironment en una clase para obtener información sobre los valores siguientes:
Las aplicaciones web implementan la interfaz IWebHostEnvironment
, que hereda IHostEnvironment
y agrega IWebHostEnvironment
.
La configuración de host se usa para las propiedades de la implementación de IHostEnvironment.
La configuración del host está disponible desde HostBuilderContext.Configuration dentro de ConfigureAppConfiguration. Después de ConfigureAppConfiguration
, HostBuilderContext.Configuration
se reemplaza por la configuración de la aplicación.
Para agregar la configuración de host, llame a ConfigureHostConfiguration en IHostBuilder
. Se puede llamar varias veces a ConfigureHostConfiguration
con resultados de suma. El host usa cualquier opción que establezca un valor en último lugar en una clave determinada.
El proveedor de variables de entorno con el prefijo DOTNET_
y los argumentos de línea de comandos se incluyen mediante CreateDefaultBuilder
. Para las aplicaciones web, se agrega el proveedor de variables de entorno con el prefijo ASPNETCORE_
. El prefijo se quita cuando se leen las variables de entorno. Por ejemplo, el valor de la variable de entorno de ASPNETCORE_ENVIRONMENT
se convierte en el valor de configuración de host de la clave environment
.
En el ejemplo siguiente se crea la configuración de host:
// using Microsoft.Extensions.Configuration;
Host.CreateDefaultBuilder(args)
.ConfigureHostConfiguration(configHost =>
{
configHost.SetBasePath(Directory.GetCurrentDirectory());
configHost.AddJsonFile("hostsettings.json", optional: true);
configHost.AddEnvironmentVariables(prefix: "PREFIX_");
configHost.AddCommandLine(args);
});
La configuración de la aplicación se crea llamando a ConfigureAppConfiguration en IHostBuilder
. Se puede llamar varias veces a ConfigureAppConfiguration
con resultados de suma. La aplicación usa cualquier opción que establezca un valor en último lugar en una clave determinada.
La configuración creada por ConfigureAppConfiguration
está disponible en HostBuilderContext.Configuration para las operaciones posteriores y como servicio desde DI. La configuración de host también se agrega a la configuración de la aplicación.
Para más información, consulte Configuración en ASP.NET Core.
En esta sección se enumeran las configuraciones de host que se aplican a las cargas de trabajo HTTP y no HTTP. De forma predeterminada, las variables de entorno que se usan para configurar estas opciones pueden tener un prefijo DOTNET_
o ASPNETCORE_
, que aparece en la siguiente configuración para el marcador de posición {PREFIX_}
.
La propiedad IHostEnvironment.ApplicationName se establece a partir de la configuración de host durante la construcción de este.
Clave: applicationName
Tipo: string
Predeterminado: nombre del ensamblado que contiene el punto de entrada de la aplicación.
Variable de entorno: {PREFIX_}APPLICATIONNAME
Para establecer este valor, use la variable de entorno.
La propiedad IHostEnvironment.ContentRootPath determina dónde el host comienza a buscar archivos de contenido. Si no existe la ruta de acceso, el host no se puede iniciar.
Clave: contentRoot
Tipo: string
Predeterminado: carpeta donde se encuentra el ensamblado de la aplicación.
Variable de entorno: {PREFIX_}CONTENTROOT
Para establecer este valor, use la variable de entorno o llame a UseContentRoot
en IHostBuilder
:
Host.CreateDefaultBuilder(args)
.UseContentRoot("c:\\content-root")
//...
Para obtener más información, consulte:
La propiedad IHostEnvironment.EnvironmentName se puede establecer en cualquier valor. Los valores definidos por el marco son Development
, Staging
y Production
. Los valores no distinguen mayúsculas de minúsculas.
Clave: environment
Tipo: string
Predeterminado:Production
Variable de entorno: {PREFIX_}ENVIRONMENT
Para establecer este valor, use la variable de entorno o llame a UseEnvironment
en IHostBuilder
:
Host.CreateDefaultBuilder(args)
.UseEnvironment("Development")
//...
HostOptions.ShutdownTimeout establece el tiempo de espera para StopAsync. El valor predeterminado es cinco segundos. Durante el período de tiempo de espera, el host:
Si el período de tiempo de espera expira antes de que todos los servicios hospedados se hayan detenido, los servicios activos que queden se detendrán cuando se cierre la aplicación. Los servicios se detienen aun cuando no hayan terminado de procesarse. Si los servicios requieren más tiempo para detenerse, aumente el tiempo de espera.
Clave: shutdownTimeoutSeconds
Tipo: int
Predeterminado: 5 segundos
Variable de entorno: {PREFIX_}SHUTDOWNTIMEOUTSECONDS
Para establecer este valor, use la variable de entorno o configure HostOptions
. El siguiente ejemplo establece el tiempo de espera en 20 segundos:
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.Configure<HostOptions>(option =>
{
option.ShutdownTimeout = System.TimeSpan.FromSeconds(20);
});
});
Algunas configuraciones de host solo se aplican a las cargas de trabajo HTTP. De forma predeterminada, las variables de entorno que se usan para configurar estas opciones pueden tener un prefijo DOTNET_
o ASPNETCORE_
.
Los métodos de extensión en IWebHostBuilder
están disponibles para estas configuraciones. Los ejemplos de código que muestran cómo llamar a los métodos de extensión suponen que webBuilder
es una instancia de IWebHostBuilder
, como en el ejemplo siguiente:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.CaptureStartupErrors(true);
webBuilder.UseStartup<Startup>();
});
Cuando es false
, los errores durante el inicio provocan la salida del host. Cuando es true
, el host captura las excepciones producidas durante el inicio e intenta iniciar el servidor.
Clave: captureStartupErrors
Escriba: bool
(true
/1
o false
/0
)
Valor predeterminado: false
, a menos que la aplicación se ejecute con Kestrel detrás de IIS, en cuyo caso el valor predeterminado es true
.
Variable de entorno: {PREFIX_}CAPTURESTARTUPERRORS
Para establecer este valor, utilice la configuración o llame a CaptureStartupErrors
:
webBuilder.CaptureStartupErrors(true);
Si se habilita, o si el entorno es Development
, la aplicación captura errores detallados.
Clave: detailedErrors
Escriba: bool
(true
/1
o false
/0
)
Predeterminado:false
Variable de entorno: {PREFIX_}DETAILEDERRORS
Para establecer este valor, utilice la configuración o llame a UseSetting
:
webBuilder.UseSetting(WebHostDefaults.DetailedErrorsKey, "true");
Una cadena delimitada por punto y coma de ensamblados de inicio de hospedaje para cargar en el inicio. Aunque el valor de configuración predeterminado es una cadena vacía, los ensamblados de inicio de hospedaje incluyen siempre el ensamblado de la aplicación. Cuando se especifican los ensamblados de inicio de hospedaje, estos se agregan al ensamblado de la aplicación para que se carguen cuando la aplicación genera sus servicios comunes durante el inicio.
Clave: hostingStartupAssemblies
Tipo: string
Predeterminado: Cadena vacía
Variable de entorno: {PREFIX_}HOSTINGSTARTUPASSEMBLIES
Para establecer este valor, utilice la configuración o llame a UseSetting
:
webBuilder.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "assembly1;assembly2");
Una cadena delimitada por punto y coma de ensamblados de inicio de hospedaje para excluir en el inicio.
Clave: hostingStartupExcludeAssemblies
Tipo: string
Predeterminado: Cadena vacía
Variable de entorno: {PREFIX_}HOSTINGSTARTUPEXCLUDEASSEMBLIES
Para establecer este valor, utilice la configuración o llame a UseSetting
:
webBuilder.UseSetting(WebHostDefaults.HostingStartupExcludeAssembliesKey, "assembly1;assembly2");
Puerto de redireccionamiento HTTPS. Se usa en Exigir HTTPS.
Clave: https_port
Tipo: string
Predeterminado: no se ha establecido ningún valor predeterminado.
Variable de entorno: {PREFIX_}HTTPS_PORT
Para establecer este valor, utilice la configuración o llame a UseSetting
:
webBuilder.UseSetting("https_port", "8080");
Indica si el host debe escuchar en las direcciones URL configuradas con IWebHostBuilder
en lugar de las que están configuradas con la implementación de IServer
.
Clave: preferHostingUrls
Escriba: bool
(true
/1
o false
/0
)
Predeterminado:false
Variable de entorno: {PREFIX_}PREFERHOSTINGURLS
Para establecer este valor, use la variable de entorno o llame a PreferHostingUrls
:
webBuilder.PreferHostingUrls(true);
Impide la carga automática de los ensamblados de inicio de hospedaje, incluidos los configurados por el ensamblado de la aplicación. Para más información, consulte Uso de ensamblados de inicio de hospedaje en ASP.NET Core.
Clave: preventHostingStartup
Escriba: bool
(true
/1
o false
/0
)
Predeterminado:false
Variable de entorno: {PREFIX_}PREVENTHOSTINGSTARTUP
Para establecer este valor, use la variable de entorno o llame a UseSetting
:
webBuilder.UseSetting(WebHostDefaults.PreventHostingStartupKey, "true");
Ensamblado en el que se va a buscar la clase Startup
.
Clave: startupAssembly
Tipo: string
Predeterminado: el ensamblado de la aplicación
Variable de entorno: {PREFIX_}STARTUPASSEMBLY
Para establecer este valor, use la variable de entorno o llame a UseStartup
. UseStartup
puede tomar un nombre del ensamblado (string
) o un tipo (TStartup
). Si se llama a varios métodos UseStartup
, la última llamada tiene prioridad.
webBuilder.UseStartup("StartupAssemblyName");
webBuilder.UseStartup<Startup>();
Cuando se habilita, suprime los mensajes de estado de inicio de hospedaje.
Clave: suppressStatusMessages
Escriba: bool
(true
/1
o false
/0
)
Predeterminado:false
Variable de entorno: {PREFIX_}SUPPRESSSTATUSMESSAGES
Para establecer este valor, utilice la configuración o llame a UseSetting
:
webBuilder.UseSetting(WebHostDefaults.SuppressStatusMessagesKey, "true");
Lista delimitada por punto y coma de las direcciones IP o las direcciones de host con los puertos y protocolos en los que el servidor debe escuchar las solicitudes. Por ejemplo: http://localhost:123
. Use "*" para indicar que el servidor debe escuchar las solicitudes en cualquier dirección IP o nombre de host usando el puerto y el protocolo especificados (por ejemplo, http://*:5000
). El protocolo (http://
o https://
) debe incluirse con cada dirección URL. Los formatos admitidos varían de un servidor a otro.
Clave: urls
Tipo: string
Predeterminado: http://localhost:5000
y https://localhost:5001
Variable de entorno: {PREFIX_}URLS
Para establecer este valor, use la variable de entorno o llame a UseUrls
:
webBuilder.UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002");
Kestrel tiene su propia API de configuración de punto de conexión. Para más información, consulte Servidor web Kestrel en ASP.NET Core.
La propiedad IWebHostEnvironment.WebRootPath determina la ruta de acceso relativa a los recursos estáticos de la aplicación. Si la ruta de acceso no existe, se utiliza un proveedor de archivos no-op.
Clave: webroot
Tipo: string
Predeterminado: De manera predeterminada, es wwwroot
. Debe existir la ruta de acceso a {raíz del contenido}/wwwroot.
Variable de entorno: {PREFIX_}WEBROOT
Para establecer este valor, use la variable de entorno o llame a UseWebRoot
en IWebHostBuilder
:
webBuilder.UseWebRoot("public");
Para obtener más información, consulte:
Llame a los métodos en la implementación de IHost creada para iniciar y detener la aplicación. Estos métodos afectan a todas las implementaciones de IHostedService registradas en el contenedor de servicios.
La diferencia entre los métodos Run*
y Start*
es que los métodos Run*
esperan a que el host se complete antes de volver, mientras que los métodos Start*
vuelven inmediatamente. Los métodos Run*
se usan normalmente en aplicaciones de consola, mientras que los métodos Start*
se usan normalmente en servicios de larga duración.
Run inicia la aplicación y bloquea el subproceso que realiza la llamada hasta que se cierre el host.
RunAsync inicia la aplicación y devuelve Task, que se completa cuando se desencadena el token de cancelación o el cierre.
RunConsoleAsync habilita la compatibilidad con la consola, compila e inicia el host y espera a que Ctrl+C/SIGINT (Windows), Ctrl+C (macOS) o SIGTERM para apagar.
Start inicia el host de forma sincrónica.
StartAsync inicia el host y devuelve Task, que se completa cuando se desencadena el token de cancelación o el cierre.
WaitForStartAsync se llama al inicio de StartAsync
, que espera hasta que se complete antes de continuar. Este método se puede usar para retrasar el inicio hasta que lo señale un evento externo.
StopAsync intenta detener el host en el tiempo de espera proporcionado.
WaitForShutdown bloquea el subproceso de llamada hasta que IHostLifetime desencadene el apagado, como a través de Ctrl+C/SIGINT (Windows), Ctrl+C (macOS) o SIGTERM.
WaitForShutdownAsync devuelve Task, que se completa cuando se desencadena el cierre a través del token determinado y llama a StopAsync.
El control directo de la vigencia del host se puede lograr mediante métodos a los que se puede llamar de forma externa:
public class Program
{
private IHost _host;
public Program()
{
_host = new HostBuilder()
.Build();
}
public async Task StartAsync()
{
_host.StartAsync();
}
public async Task StopAsync()
{
using (_host)
{
await _host.StopAsync(TimeSpan.FromSeconds(5));
}
}
}
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 de una versión específica, usa la lista desplegable Cambiar ramas o etiquetas. Para obtener más información, vea Procedimientos para seleccionar una etiqueta de versión de código fuente de ASP.NET Core (dotnet/AspNetCore.Docs #26205).
Comentarios de ASP.NET Core
ASP.NET Core é un proxecto de código aberto. Selecciona unha ligazón para ofrecer comentarios:
Evento
Campionato do Mundo de Power BI DataViz
Feb 14, 4 PM - Mar 31, 4 PM
Con 4 posibilidades de entrar, poderías gañar un paquete de conferencias e facelo ao Live Grand Finale en Las Vegas
Máis informaciónFormación
Módulo
Configuración de servicios con inserción de dependencias en ASP.NET Core - Training
Comprenda e implemente la inserción de dependencias en una aplicación ASP.NET Core. Use el contenedor de servicios integrado de ASP.NET Core para administrar las dependencias. Registre los servicios con el contenedor de servicios.
Documentación
Obtén información sobre el host web en ASP.NET Core, que es responsable de la administración de inicio y duración de la aplicación.
Uso de ensamblados de inicio de hospedaje en ASP.NET Core
Sepa cómo mejorar una aplicación ASP.NET Core desde un ensamblado externo con una implementación de IHostingStartup.
Información sobre cómo usar la API de configuración para configurar AppSettings en una aplicación ASP.NET Core
ASP0010: No usar UseStartup con WebApplicationBuilder.WebHost
Más información sobre la regla de análisis ASP0010: No usar UseStartup con WebApplicationBuilder.WebHost