Generisk .NET-värd i ASP.NET Core
Note
Det här är inte den senaste versionen av den här artikeln. Den aktuella versionen finns i den .NET 9-versionen av den här artikeln.
Varning
Den här versionen av ASP.NET Core stöds inte längre. Mer information finns i .NET och .NET Core Support Policy. Den aktuella versionen finns i den .NET 9-versionen av den här artikeln.
Viktig
Den här informationen gäller en förhandsversionsprodukt som kan ändras avsevärt innan den släpps kommersiellt. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, med avseende på den information som tillhandahålls här.
För den aktuella utgåvan, se .NET 9-versionen av den här artikeln.
Den här artikeln innehåller information om hur du använder .NET Generic Host i ASP.NET Core.
ASP.NET Core-mallarna skapar en WebApplicationBuilder och WebApplication, som ger ett effektivt sätt att konfigurera och köra webbprogram utan en Startup
-klass. Mer information om WebApplicationBuilder
och WebApplication
finns i Migrera från ASP.NET Core 5.0 till 6.0.
Information om hur du använder .NET Generic Host i konsolappar finns i .NET Generic Host.
Definition av värd
En värd är ett objekt som kapslar in en apps resurser, till exempel:
- Beroendeinjektion (DI)
- Skogsavverkning
- Konfiguration
-
IHostedService
implementeringar
När en värd startar anropas IHostedService.StartAsync för varje implementering av IHostedService som registrerats i tjänstbehållarens samling av värdtjänster. I en webbapp är en av de IHostedService
implementeringarna en webbtjänst som startar en HTTP-serverimplementering.
Om du inkluderar alla appens beroende resurser i ett objekt kan du styra appstarten och den graciösa avstängningen.
Konfigurera en värd
Värden konfigureras, byggs och körs vanligtvis med kod i Program.cs
. Följande kod skapar en värd med en IHostedService
implementering som läggs till i DI-containern:
await Host.CreateDefaultBuilder(args)
.ConfigureServices(services =>
{
services.AddHostedService<SampleHostedService>();
})
.Build()
.RunAsync();
För en HTTP-arbetsbelastning anropar du ConfigureWebHostDefaults efter CreateDefaultBuilder:
await Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.Build()
.RunAsync();
Standardinställningar för builder
Metoden CreateDefaultBuilder:
- Anger innehållsroten till den sökväg som returneras av GetCurrentDirectory.
- Läser in värdkonfiguration från:
- Miljövariabler med prefixet
DOTNET_
. - Kommandoradsargument.
- Miljövariabler med prefixet
- Läser in appkonfiguration från:
-
appsettings.json
. -
appsettings.{Environment}.json
. -
Användarhemligheter när appen körs i den
Development
miljön. - Miljövariabler.
- Kommandoradsargument.
-
- Lägger till följande loggning leverantörer:
- Konsol
- Felsöka
- EventSource
- EventLog (endast när du kör på Windows)
- Aktiverar omfångsverifiering och beroendeverifiering när miljön är utvecklingsmiljö.
Metoden ConfigureWebHostDefaults:
- Läser in värdkonfiguration från miljövariabler med prefixet
ASPNETCORE_
. - Anger Kestrel server som webbserver och konfigurerar den med hjälp av appens värdkonfigurationsproviders. Standardalternativen för Kestrel-servern finns i Konfigurera alternativ för ASP.NET Core Kestrel-webbservern.
- Lägger till mellanprogram för värdfiltrering.
- Lägger till middleware för vidarebefordrade headers om
ASPNETCORE_FORWARDEDHEADERS_ENABLED
är lika medtrue
. - Aktiverar IIS-integrering. Standardalternativen för IIS finns i Host ASP.NET Core on Windows with IIS.
I Inställningar för alla apptyper och Inställningar för webbappar avsnitt senare i den här artikeln visas hur du åsidosätter standardinställningarna för builder.
Ramverksbaserade tjänster
Följande tjänster registreras automatiskt:
Mer information om ramverkstjänster finns i Beroendeinmatning i ASP.NET Core.
IHostApplicationLifetime
Injicera tjänsten IHostApplicationLifetime (tidigare IApplicationLifetime
) i varje klass för att hantera uppgifter efter start och graciös avstängning. Tre egenskaper i gränssnittet är annulleringstoken som används för att registrera metoder för att starta och stoppa apphändelser. Gränssnittet innehåller också en StopApplication
-metod som gör att appar kan begära en korrekt avstängning.
När du utför en graciös avstängning gör värden följande:
- Utlöser ApplicationStopping händelsehanterare, vilket gör att appen kan köra logik innan avstängningsprocessen börjar.
- Stoppar servern, vilket inaktiverar nya anslutningar. Servern väntar på att begäranden om befintliga anslutningar ska slutföras, så länge tidsgränsen för avstängning tillåter. Servern skickar anslutningsstängningshuvudet för ytterligare begäranden om befintliga anslutningar.
- Utlöser ApplicationStopped händelsehanterare, vilket gör att appen kan köra logik när programmet har stängts av.
Följande exempel är en IHostedService
implementering som registrerar IHostApplicationLifetime
händelsehanterare:
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()
{
// ...
}
}
IHostLifetime
Den IHostLifetime-implementeringen styr när hosten startar och när den stoppar. Den senast registrerade implementeringen används.
Microsoft.Extensions.Hosting.Internal.ConsoleLifetime
är standardimplementeringen IHostLifetime
.
ConsoleLifetime
:
- Lyssnar efter Ctrl+C/SIGINT (Windows), Ctrl+C (macOS) eller SIGTERM och anropar StopApplication för att starta avstängningsprocessen.
- Avblockera tillägg som RunAsync och WaitForShutdownAsync.
IHostEnvironment
Mata in IHostEnvironment-tjänsten i en klass för att få information om följande inställningar:
Webbappar implementerar IWebHostEnvironment
-gränssnittet, som ärver IHostEnvironment
och lägger till WebRootPath-.
Värdkonfiguration
Värdkonfiguration används för egenskaperna hos implementeringen av IHostEnvironment.
Värdkonfigurationen är tillgänglig från HostBuilderContext.Configuration inuti ConfigureAppConfiguration. Efter ConfigureAppConfiguration
ersätts HostBuilderContext.Configuration
med appkonfigurationen.
Om du vill lägga till värdkonfiguration anropar du ConfigureHostConfiguration på IHostBuilder
.
ConfigureHostConfiguration
kan anropas flera gånger med additiva resultat. Värdenheten använder det alternativ som anger ett värde sist på en viss nyckel.
Miljövariabelprovidern med prefixet DOTNET_
och kommandoradsargument ingår i CreateDefaultBuilder
. För webbappar läggs miljövariabelprovidern med prefixet ASPNETCORE_
till. Prefixet tas bort när miljövariablerna läses. Miljövariabelvärdet för ASPNETCORE_ENVIRONMENT
blir till exempel värdkonfigurationsvärdet för den environment
nyckeln.
I följande exempel skapas värdkonfiguration:
Host.CreateDefaultBuilder(args)
.ConfigureHostConfiguration(hostConfig =>
{
hostConfig.SetBasePath(Directory.GetCurrentDirectory());
hostConfig.AddJsonFile("hostsettings.json", optional: true);
hostConfig.AddEnvironmentVariables(prefix: "PREFIX_");
hostConfig.AddCommandLine(args);
});
Appkonfiguration
Appkonfigurationen skapas genom att anropa ConfigureAppConfiguration på IHostBuilder
.
ConfigureAppConfiguration
kan anropas flera gånger med additiva resultat. Appen använder det alternativ som anger ett värde sist på en viss nyckel.
Konfigurationen som skapas av ConfigureAppConfiguration
är tillgänglig på HostBuilderContext.Configuration för efterföljande åtgärder och som en tjänst från DI. Värdkonfigurationen läggs också till i app-konfigurationen.
Mer information finns i Configuration i ASP.NET Core.
Inställningar för alla apptyper
I det här avsnittet visas värdinställningar som gäller för både HTTP- och icke-HTTP-arbetsbelastningar. Som standard kan miljövariabler som används för att konfigurera dessa inställningar ha ett DOTNET_
- eller ASPNETCORE_
prefix, som visas i följande lista med inställningar som platshållare för {PREFIX_}
. Mer information finns i avsnittet Standard builder-inställningar och Configuration: Environment variables.
ApplicationName
Egenskapen IHostEnvironment.ApplicationName anges från värdkonfigurationen under värdkonstruktionen.
nyckel: applicationName
typ: string
Standard: Namnet på den sammansättning som innehåller appens startpunkt.
Miljövariabel: {PREFIX_}APPLICATIONNAME
Använd miljövariabeln för att ange det här värdet.
ContentRoot
Egenskapen IHostEnvironment.ContentRootPath bestämmer var värddatorn börjar söka efter innehållsfiler. Om sökvägen inte finns misslyckas hosten med att starta.
nyckel: contentRoot
typ: string
Standard: Mappen där appsammansättningen finns.
Miljövariabel: {PREFIX_}CONTENTROOT
Om du vill ange det här värdet använder du miljövariabeln eller anropar UseContentRoot
på IHostBuilder
:
Host.CreateDefaultBuilder(args)
.UseContentRoot("/path/to/content/root")
// ...
Mer information finns i:
Miljönamn
Egenskapen IHostEnvironment.EnvironmentName kan anges till valfritt värde. Ramverksdefinierade värden omfattar Development
, Staging
och Production
. Värden är inte skiftlägeskänsliga.
nyckel: environment
typ: string
standard: Production
Miljövariabel: {PREFIX_}ENVIRONMENT
Om du vill ange det här värdet använder du miljövariabeln eller anropar UseEnvironment
på IHostBuilder
:
Host.CreateDefaultBuilder(args)
.UseEnvironment("Development")
// ...
Avstängningstidsgräns
HostOptions.ShutdownTimeout anger tidsgränsen för StopAsync. Standardvärdet är 30 sekunder. Under time-out-perioden:
- Utlösare IHostApplicationLifetime.ApplicationStopping.
- Försöker stoppa värdbaserade tjänster, loggningsfel för tjänster som inte kan stoppas.
Om tidsgränsen går ut innan alla värdbaserade tjänster stoppas stoppas alla återstående aktiva tjänster när appen stängs av. Tjänsterna stoppas även om de inte har slutfört bearbetningen. Om tjänster kräver mer tid för att stoppa ökar du tidsgränsen.
nyckel: shutdownTimeoutSeconds
Typ: int
Standard: 30 sekunder
Miljövariabel: {PREFIX_}SHUTDOWNTIMEOUTSECONDS
Om du vill ange det här värdet använder du miljövariabeln eller konfigurerar HostOptions
. I följande exempel anges tidsgränsen till 20 sekunder:
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.Configure<HostOptions>(options =>
{
options.ShutdownTimeout = TimeSpan.FromSeconds(20);
});
});
Inaktivera omläsning av appkonfiguration vid ändring
Som standard, laddas appsettings.json
och appsettings.{Environment}.json
om när filen ändras. Om du vill inaktivera det här inläsningsbeteendet i ASP.NET Core 5.0 eller senare anger du hostBuilder:reloadConfigOnChange
-nyckeln till false
.
nyckel: hostBuilder:reloadConfigOnChange
typ: bool
(true
eller false
)
standard: true
kommandoradsargument: hostBuilder:reloadConfigOnChange
Miljövariabel: {PREFIX_}hostBuilder:reloadConfigOnChange
Varning
Kolonavgränsaren (:
) fungerar inte med hierarkiska nycklar för miljövariabler på alla plattformar. Mer information finns i Miljövariabler.
Inställningar för webbappar
Vissa värdinställningar gäller endast för HTTP-arbetsbelastningar. Som standard kan miljövariabler som används för att konfigurera dessa inställningar ha ett DOTNET_
- eller ASPNETCORE_
prefix, som visas i följande lista med inställningar som platshållare för {PREFIX_}
.
Förlängningsmetoder på IWebHostBuilder
är tillgängliga för dessa inställningar. Kodexempel som visar hur du anropar tilläggsmetoderna förutsätter webBuilder
är en instans av IWebHostBuilder
, som i följande exempel:
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
// ...
});
FångaStartfel
När false
inträffar fel vid start resulterar det i att värdenheten avslutas. När true
fångar upp undantag under uppstart och försöker starta servern.
Nyckel: captureStartupErrors
typ: bool
(true
/1
eller false
/0
)
Standard: Standardvärdet är false
förutom när appen körs med Kestrel via IIS, där standardvärdet är true
.
Miljövariabel: {PREFIX_}CAPTURESTARTUPERRORS
Om du vill ange det här värdet använder du konfiguration eller anropar CaptureStartupErrors
:
webBuilder.CaptureStartupErrors(true);
Detaljerade Fel
När den är aktiverad eller när miljön är Development
samlar appen in detaljerade fel.
nyckel: detailedErrors
typ: bool
(true
/1
eller false
/0
)
förval: false
Miljövariabel: {PREFIX_}DETAILEDERRORS
Om du vill ange det här värdet använder du konfiguration eller anropar UseSetting
:
webBuilder.UseSetting(WebHostDefaults.DetailedErrorsKey, "true");
HostingStartupFörsamlingar
En semikolonavgränsad sträng som är värd för startsammansättningar för att läsa in vid start. Även om konfigurationsvärdet som standard är en tom sträng inkluderar värdstartssammansättningarna alltid appens sammansättning. När du tillhandahåller värdtjänster för startsammansättningar läggs de till i appens sammansättning för inläsning när appen skapar sina gemensamma tjänster under starten.
Nyckel: hostingStartupAssemblies
typ: string
Standard: Tom sträng
Miljövariabel: {PREFIX_}HOSTINGSTARTUPASSEMBLIES
Om du vill ange det här värdet använder du konfiguration eller anropar UseSetting
:
webBuilder.UseSetting(
WebHostDefaults.HostingStartupAssembliesKey, "assembly1;assembly2");
ExkluderaSamlingarFörHostingStartup
En semikolonavgränsad sträng med uppstartssammansättningar som ska undantas vid start.
Nyckel: hostingStartupExcludeAssemblies
typ: string
Standard: Tom sträng
Miljövariabel: {PREFIX_}HOSTINGSTARTUPEXCLUDEASSEMBLIES
Om du vill ange det här värdet använder du konfiguration eller anropar UseSetting
:
webBuilder.UseSetting(
WebHostDefaults.HostingStartupExcludeAssembliesKey, "assembly1;assembly2");
HTTPS-Port
Ange HTTPS-porten som omdirigering till om du får en icke-HTTPS-anslutning. Används i att upprätthålla HTTPS. Den här inställningen gör inte att servern lyssnar på den angivna porten. Det är alltså möjligt att oavsiktligt omdirigera begäranden till en oanvänd port.
Nyckel: https_port
Typ: string
Standard: Ett standardvärde har inte angetts.
Miljövariabel: {PREFIX_}HTTPS_PORT
Om du vill ange det här värdet använder du konfiguration eller anropar UseSetting
:
webBuilder.UseSetting("https_port", "8080");
HTTPS-portar
Portarna som ska lyssnas på för HTTPS-anslutningar.
nyckel: https_ports
Typ: string
Standard: Ett standardvärde har inte angetts.
Miljövariabel: {PREFIX_}HTTPS_PORTS
Om du vill ange det här värdet använder du konfiguration eller anropar UseSetting
:
webBuilder.UseSetting("https_ports", "8080");
PreferHostingUrls
Anger om värden ska lyssna på url:erna som konfigurerats med IWebHostBuilder
i stället för de URL:er som konfigurerats med IServer
implementeringen.
nyckel: preferHostingUrls
typ: bool
(true
/1
eller false
/0
)
Standard: false
Miljövariabel: {PREFIX_}PREFERHOSTINGURLS
Om du vill ange det här värdet använder du miljövariabeln eller anropar PreferHostingUrls
:
webBuilder.PreferHostingUrls(true);
PreventHostingStartup
Förhindrar automatisk läsning av värdstartssamlingar, inklusive sådana som konfigurerats av appens samling. För mer information, se Användning av värdstartssammansättningar i ASP.NET Core.
nyckel: preventHostingStartup
typ: bool
(true
/1
eller false
/0
)
standard: false
Miljövariabel: {PREFIX_}PREVENTHOSTINGSTARTUP
Om du vill ange det här värdet använder du miljövariabeln eller anropar UseSetting
:
webBuilder.UseSetting(WebHostDefaults.PreventHostingStartupKey, "true");
StartupAssembly
Sammansättningen för att söka efter klassen Startup
.
nyckel: startupAssembly
typ: string
Standard: Appens sammansättning
Miljövariabel: {PREFIX_}STARTUPASSEMBLY
Om du vill ange det här värdet använder du miljövariabeln eller anropar UseStartup
.
UseStartup
kan ta ett sammansättningsnamn (string
) eller en typ (TStartup
). Om flera UseStartup
metoder anropas har den sista företräde.
webBuilder.UseStartup("StartupAssemblyName");
webBuilder.UseStartup<Startup>();
UndertryckStatusMeddelanden
När det är aktiverat, undertrycker det startstatusmeddelanden.
nyckel: suppressStatusMessages
typ: bool
(true
/1
eller false
/0
)
standard: false
Miljövariabel: {PREFIX_}SUPPRESSSTATUSMESSAGES
Om du vill ange det här värdet använder du konfiguration eller anropar UseSetting
:
webBuilder.UseSetting(WebHostDefaults.SuppressStatusMessagesKey, "true");
URL:er
En semikolonavgränsad lista över IP-adresser eller värdadresser med portar och protokoll som servern ska lyssna på efter begäranden. Till exempel http://localhost:123
. Använd "*" för att ange att servern ska lyssna efter begäranden på alla IP-adresser eller värdnamn med den angivna porten och protokollet (till exempel http://*:5000
). Protokollet (http://
eller https://
) måste ingå i varje URL. Format som stöds varierar mellan servrar.
nyckel: urls
typ: string
Standard: http://localhost:5000
och https://localhost:5001
Miljövariabel: {PREFIX_}URLS
Om du vill ange det här värdet använder du miljövariabeln eller anropar UseUrls
:
webBuilder.UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002");
Kestrel har ett eget API för slutpunktskonfiguration. Mer information finns i Konfigurera slutpunkter för ASP.NET Core Kestrel-webbservern.
WebRoot
Egenskapen IWebHostEnvironment.WebRootPath avgör den relativa sökvägen till appens statiska tillgångar. Om sökvägen inte finns används en no-op filprovider.
nyckel: webroot
Typ: string
standard: Standardvärdet är wwwroot
. Sökvägen till {content root}/wwwroot måste finnas.
Miljövariabel: {PREFIX_}WEBROOT
Om du vill ange det här värdet använder du miljövariabeln eller anropar UseWebRoot
på IWebHostBuilder
:
webBuilder.UseWebRoot("public");
Mer information finns i:
Hantera värdlivslängden
Anropa metoder för den inbyggda IHost-implementeringen för att starta och stoppa appen. Dessa metoder påverkar alla IHostedService implementeringar som är registrerade i tjänstcontainern.
Skillnaden mellan Run*
och Start*
metoderna är att Run*
metoderna väntar tills värden har slutfört innan de returnerar, medan Start*
metoderna returnerar omedelbart. De Run*
metoderna används vanligtvis i konsolappar, medan de Start*
metoderna vanligtvis används i långvariga tjänster.
Springa
Run kör appen och blockerar den anropande tråden tills värdssystemet stängs ned.
RunAsync
RunAsync kör appen och returnerar en Task som slutförs när annulleringstoken eller avstängningen utlöses.
RunConsoleAsync
RunConsoleAsync aktiverar konsolstöd, skapar och startar värden och väntar på att Ctrl+C/SIGINT (Windows), Ctrl+C (macOS) eller SIGTERM stängs av.
Starta
Start startar värdtjänsten synkront.
StartAsync
StartAsync startar värddatorn och returnerar en Task som slutförs när en avbrytningstoken eller avstängning aktiveras.
WaitForStartAsync anropas i början av StartAsync
, vilket väntar tills detta är klart innan programmet fortsätter. Den här metoden kan användas för att fördröja starten tills den signaleras av en extern händelse.
StopAsync
StopAsync försöker stoppa värddatorn inom den angivna tidsgränsen.
WaitForShutdown
WaitForShutdown blockerar den anropande tråden tills avstängningen utlöses av IHostLifetime, till exempel via Ctrl+C/SIGINT (Windows), Ctrl+C (macOS) eller SIGTERM.
WaitForShutdownAsync
WaitForShutdownAsync returnerar en Task som slutförs när avstängningen utlöses via den angivna token och anropar StopAsync.
Mallarna ASP.NET Core skapar en .NET Core Generic Host (HostBuilder).
Den här artikeln innehåller information om hur du använder .NET Generic Host i ASP.NET Core. Information om hur du använder .NET Generic Host i konsolappar finns i .NET Generic Host.
Värddefinition
En värd är ett objekt som kapslar in en apps resurser, till exempel:
- Beroendeinmatning (DI)
- Skogsavverkning
- Konfiguration
-
IHostedService
implementeringar
När en värd startar anropas IHostedService.StartAsync för varje implementering av IHostedService som registrerats i tjänstbehållarens samling av värdtjänster. I en webbapp är en av de IHostedService
implementeringarna en webbtjänst som startar en HTTP-serverimplementering.
Den främsta orsaken till att inkludera alla appens beroende resurser i ett objekt är livslängdshantering: kontroll över appstart och graciös avstängning.
Konfigurera en värd
Värden konfigureras, skapas och körs vanligtvis av kod i klassen Program
. Metoden Main
:
- Anropar en
CreateHostBuilder
metod för att skapa och konfigurera ett builder-objekt. - Anropar
Build
- ochRun
-metoder på builder-objektet.
Webbmallarna ASP.NET Core genererar följande kod för att skapa en värd:
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>();
});
}
Följande kod skapar en icke-HTTP-arbetsbelastning med en IHostedService
implementering som läggs till i DI-containern.
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>();
});
}
För en HTTP-arbetsbelastning är metoden Main
samma men CreateHostBuilder
anropar ConfigureWebHostDefaults
:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Om appen använder Entity Framework Core ändrar du inte namnet eller signaturen för metoden CreateHostBuilder
. Verktygen Entity Framework Core förväntar sig att hitta en CreateHostBuilder
metod som konfigurerar värden utan att köra appen. Mer information finns i Design-time DbContext Creation.
Standardinställningar för builder
Metoden CreateDefaultBuilder:
- Anger innehållsroten till sökvägen som återges av GetCurrentDirectory.
- Läser in värdkonfiguration från:
- Miljövariabler med prefixet
DOTNET_
. - Kommandoradsargument.
- Miljövariabler med prefixet
- Läser in appkonfiguration från:
-
appsettings.json
. -
appsettings.{Environment}.json
. -
Användarhemligheter när appen körs i den
Development
miljön. - Miljövariabler.
- Kommandoradsargument.
-
- Lägger till följande loggning leverantörer:
- Konsol
- Felsöka
- EventSource
- EventLog (endast när du kör på Windows)
- Aktiverar omfångsverifiering och beroendeverifiering när miljön är Utveckling.
Metoden ConfigureWebHostDefaults:
- Läser in värdkonfiguration från miljövariabler med prefixet
ASPNETCORE_
. - Anger Kestrel server som webbserver och konfigurerar den med hjälp av appens värdkonfigurationsproviders. Standardalternativen för Kestrel-servern finns i Konfigurera alternativ för ASP.NET Core Kestrel-webbservern.
- Lägger till mellanprogram för värdfiltrering.
- Lägger till vidarebefordrade headers middleware om
ASPNETCORE_FORWARDEDHEADERS_ENABLED
är lika medtrue
. - Aktiverar IIS-integrering. För IIS standardalternativ, se Host ASP.NET Core på Windows med IIS.
I avsnitten Inställningar för alla apptyper och Inställningar för webbappar senare i den här artikeln visas hur du åsidosätter standardinställningarna för byggverktyg.
Ramverksbaserade tjänster
Följande tjänster registreras automatiskt:
Mer information om ramverkstjänster finns i Beroendeinmatning i ASP.NET Core.
IHostApplicationLifetime
Inför IHostApplicationLifetime-tjänsten (tidigare IApplicationLifetime
) i valfri klass för hantering av uppgifter efter start och graciös avstängning. Tre egenskaper i gränssnittet är annulleringstoken som används för att registrera metoder för att starta och stoppa apphändelser. Gränssnittet innehåller även en StopApplication
-metod.
Följande exempel är en IHostedService
implementering som registrerar IHostApplicationLifetime
händelser:
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
}
}
IHostLifetime
Den IHostLifetime-implementeringen styr när datorn startar och när den stoppas. Den senast registrerade implementeringen används.
Microsoft.Extensions.Hosting.Internal.ConsoleLifetime
är standardimplementeringen IHostLifetime
.
ConsoleLifetime
:
- Lyssnar efter Ctrl+C/SIGINT (Windows), Ctrl+C (macOS) eller SIGTERM och anropar StopApplication för att starta avstängningsprocessen.
- Avblockera tillägg som RunAsync och WaitForShutdownAsync.
IHostEnvironment
Mata in IHostEnvironment-tjänsten i en klass för att få information om följande inställningar:
Webbappar implementerar IWebHostEnvironment
-gränssnittet, som ärver IHostEnvironment
och lägger till WebRootPath-.
Värdkonfiguration
Värdkonfiguration används för egenskaperna hos IHostEnvironment-implementationen.
Värdkonfigurationen är tillgänglig från HostBuilderContext.Configuration inuti ConfigureAppConfiguration. Efter ConfigureAppConfiguration
ersätts HostBuilderContext.Configuration
med appkonfigurationen.
Om du vill lägga till värdkonfiguration anropar du ConfigureHostConfiguration på IHostBuilder
.
ConfigureHostConfiguration
kan anropas flera gånger med additiva resultat. Värden använder det alternativ som anger ett värde sist på en viss nyckel.
Miljövariabelprovidern med prefixet DOTNET_
och kommandoradsargument ingår i CreateDefaultBuilder
. För webbappar läggs miljövariabelprovidern med prefixet ASPNETCORE_
till. Prefixet tas bort när miljövariablerna läses. Miljövariabelvärdet för ASPNETCORE_ENVIRONMENT
blir till exempel värdkonfigurationsvärdet för den environment
nyckeln.
I följande exempel skapas värdkonfiguration:
// 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);
});
Appkonfiguration
Appkonfigurationen skapas genom att anropa ConfigureAppConfiguration på IHostBuilder
.
ConfigureAppConfiguration
kan anropas flera gånger med additiva resultat. Appen använder det alternativ som anger ett värde sist på en viss nyckel.
Konfigurationen som skapas av ConfigureAppConfiguration
är tillgänglig på HostBuilderContext.Configuration för efterföljande åtgärder och som en tjänst från DI. Värdkonfigurationen läggs också till i appkonfigurationen.
Mer information finns i Configuration i ASP.NET Core.
Inställningar för alla apptyper
I det här avsnittet visas värdinställningar som gäller för både HTTP- och icke-HTTP-arbetsbelastningar. Som standard kan miljövariabler som används för att konfigurera dessa inställningar ha ett DOTNET_
- eller ASPNETCORE_
prefix, som visas i följande lista med inställningar som platshållare för {PREFIX_}
. Mer information finns i avsnittet Standard builder-inställningar och Configuration: Environment variables.
Programnamn
Egenskapen IHostEnvironment.ApplicationName anges genom värdkonfigurationen under värdkonstruktionen.
nyckel: applicationName
Typ: string
Standard: Namnet på den sammansättning som innehåller appens startpunkt.
Miljövariabel: {PREFIX_}APPLICATIONNAME
Använd miljövariabeln för att ange det här värdet.
ContentRoot
Egenskapen IHostEnvironment.ContentRootPath avgör var värddatorn börjar söka efter innehållsfiler. Om sökvägen inte finns, kommer värden inte att starta.
nyckel: contentRoot
typ: string
Standard: Mappen där appsammansättningen finns.
Miljövariabel: {PREFIX_}CONTENTROOT
Om du vill ange det här värdet använder du miljövariabeln eller anropar UseContentRoot
på IHostBuilder
:
Host.CreateDefaultBuilder(args)
.UseContentRoot("c:\\content-root")
//...
Mer information finns i:
Miljönamn
Egenskapen IHostEnvironment.EnvironmentName kan anges till valfritt värde. Ramverksdefinierade värden omfattar Development
, Staging
och Production
. Värden är inte skiftlägeskänsliga.
nyckel: environment
Typ: string
standardvärde: Production
Miljövariabel: {PREFIX_}ENVIRONMENT
Om du vill ange det här värdet använder du miljövariabeln eller anropar UseEnvironment
på IHostBuilder
:
Host.CreateDefaultBuilder(args)
.UseEnvironment("Development")
//...
Avstängningstidsgräns
HostOptions.ShutdownTimeout anger tidsgränsen för StopAsync. Standardvärdet är fem sekunder. Under tidsgränsperioden:
- Utlösare IHostApplicationLifetime.ApplicationStopping.
- Försöker stoppa värdbaserade tjänster, loggningsfel för tjänster som inte kan stoppas.
Om tidsgränsen går ut innan alla värdbaserade tjänster stoppas stoppas alla återstående aktiva tjänster när appen stängs av. Tjänsterna stoppas även om de inte har slutfört bearbetningen. Om tjänster kräver mer tid för att stoppa ökar du tidsgränsen.
nyckel: shutdownTimeoutSeconds
typ: int
Standard: 5 sekunder
Miljövariabel: {PREFIX_}SHUTDOWNTIMEOUTSECONDS
Om du vill ange det här värdet använder du miljövariabeln eller konfigurerar HostOptions
. I följande exempel anges tidsgränsen till 20 sekunder:
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.Configure<HostOptions>(option =>
{
option.ShutdownTimeout = System.TimeSpan.FromSeconds(20);
});
});
Inaktivera omläsning av appkonfiguration vid ändring
Som standard, laddas appsettings.json
och appsettings.{Environment}.json
om när filen ändras. Om du vill inaktivera det här inläsningsbeteendet i ASP.NET Core 5.0 eller senare anger du hostBuilder:reloadConfigOnChange
-nyckeln till false
.
nyckel: hostBuilder:reloadConfigOnChange
typ: bool
(true
eller false
)
Standard: true
kommandoradsargument: hostBuilder:reloadConfigOnChange
Miljövariabel: {PREFIX_}hostBuilder:reloadConfigOnChange
Varning
Kolonavgränsaren (:
) fungerar inte med hierarkiska nycklar för miljövariabler på alla plattformar. Mer information finns i Miljövariabler.
Inställningar för webbappar
Vissa värdinställningar gäller endast för HTTP-arbetsbelastningar. Som standard kan miljövariabler som används för att konfigurera dessa inställningar ha ett DOTNET_
- eller ASPNETCORE_
prefix, som visas i följande lista med inställningar som platshållare för {PREFIX_}
.
Tilläggsmetoder för IWebHostBuilder
är tillgängliga för de här inställningarna. Kodexempel som visar hur du anropar tilläggsmetoderna förutsätter webBuilder
är en instans av IWebHostBuilder
, som i följande exempel:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.CaptureStartupErrors(true);
webBuilder.UseStartup<Startup>();
});
UpptäckStartfel
När fel uppstår under start av false
resulterar det i att värden avslutas. När true
fångar undantag under uppstarten och försöker starta servern.
nyckel: captureStartupErrors
typ: bool
(true
/1
eller false
/0
)
Standard: Standardvärdet är false
om inte appen körs med Kestrel bakom IIS, där standardvärdet är true
.
Miljövariabel: {PREFIX_}CAPTURESTARTUPERRORS
Om du vill ange det här värdet använder du konfiguration eller anropar CaptureStartupErrors
:
webBuilder.CaptureStartupErrors(true);
DetaljeradeFel
När den är aktiverad eller när miljön är Development
samlar appen in detaljerade fel.
nyckel: detailedErrors
typ: bool
(true
/1
eller false
/0
)
standard: false
Miljövariabel: {PREFIX_}DETAILEDERRORS
Om du vill ange det här värdet använder du konfiguration eller anropar UseSetting
:
webBuilder.UseSetting(WebHostDefaults.DetailedErrorsKey, "true");
HostingStartupAssemblies
En semikolonavgränsad sträng med startfunktioner att ladda vid uppstart. Även om konfigurationsvärdet som standard är en tom sträng inkluderar värdstartssammansättningarna alltid appens sammansättning. När du tillhandahåller värdtjänster för startsammansättningar läggs de till i appens sammansättning för inläsning när appen skapar sina gemensamma tjänster under starten.
nyckel: hostingStartupAssemblies
typ: string
Standard: Tom sträng
Miljövariabel: {PREFIX_}HOSTINGSTARTUPASSEMBLIES
Om du vill ange det här värdet använder du konfiguration eller anropar UseSetting
:
webBuilder.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "assembly1;assembly2");
HostingStartupExcludeAssemblies
En semikolonseparerad sträng av uppstartsmoduler som ska undantas vid start.
nyckel: hostingStartupExcludeAssemblies
typ: string
Standard: Tom sträng
Miljövariabel: {PREFIX_}HOSTINGSTARTUPEXCLUDEASSEMBLIES
Om du vill ange det här värdet använder du konfiguration eller anropar UseSetting
:
webBuilder.UseSetting(WebHostDefaults.HostingStartupExcludeAssembliesKey, "assembly1;assembly2");
HTTPS-port
HTTPS-omdirigeringsporten. Används i för att tvinga fram HTTPS.
nyckel: https_port
typ: string
Standard: Ett standardvärde har inte angetts.
Miljövariabel: {PREFIX_}HTTPS_PORT
Om du vill ange det här värdet använder du konfiguration eller anropar UseSetting
:
webBuilder.UseSetting("https_port", "8080");
FöredraHostingWebbadresser
Anger om värden ska lyssna på URL:erna som konfigurerats med IWebHostBuilder
istället för de URL:er som konfigurerats med IServer
-implementationen.
nyckel: preferHostingUrls
typ: bool
(true
/1
eller false
/0
)
standard: false
Miljövariabel: {PREFIX_}PREFERHOSTINGURLS
Om du vill ange det här värdet använder du miljövariabeln eller anropar PreferHostingUrls
:
webBuilder.PreferHostingUrls(true);
PreventHostingStartup
Förhindrar automatisk inläsning av värdstartssammansättningar, inklusive värd för startsammansättningar som konfigurerats av appens sammansättning. Mer information finns i Använda värdstartssammansättningar i ASP.NET Core.
nyckel: preventHostingStartup
typ: bool
(true
/1
eller false
/0
)
standard: false
Miljövariabel: {PREFIX_}PREVENTHOSTINGSTARTUP
Om du vill ange det här värdet använder du miljövariabeln eller anropar UseSetting
:
webBuilder.UseSetting(WebHostDefaults.PreventHostingStartupKey, "true");
StartupAssembly
Sammansättningen för att söka efter klassen Startup
.
nyckel: startupAssembly
typ: string
Standard: Appens sammansättning
Miljövariabel: {PREFIX_}STARTUPASSEMBLY
Om du vill ange det här värdet använder du miljövariabeln eller anropar UseStartup
.
UseStartup
kan ta ett sammansättningsnamn (string
) eller en typ (TStartup
). Om flera UseStartup
metoder anropas har den sista företräde.
webBuilder.UseStartup("StartupAssemblyName");
webBuilder.UseStartup<Startup>();
UndertryckStatusmeddelanden
När det är aktiverat undertrycker det att vara värd för meddelanden om startstatus.
nyckel: suppressStatusMessages
typ: bool
(true
/1
eller false
/0
)
Standard: false
Miljövariabel: {PREFIX_}SUPPRESSSTATUSMESSAGES
Om du vill ange det här värdet använder du konfiguration eller anropar UseSetting
:
webBuilder.UseSetting(WebHostDefaults.SuppressStatusMessagesKey, "true");
URL:er
En semikolonavgränsad lista över IP-adresser eller värdadresser med portar och protokoll som servern ska lyssna på efter begäranden. Till exempel http://localhost:123
. Använd "*" för att ange att servern ska lyssna efter begäranden på alla IP-adresser eller värdnamn med den angivna porten och protokollet (till exempel http://*:5000
). Protokollet (http://
eller https://
) måste ingå i varje URL. Format som stöds varierar mellan servrar.
nyckel: urls
typ: string
standard: http://localhost:5000
och https://localhost:5001
Miljövariabel: {PREFIX_}URLS
Om du vill ange det här värdet använder du miljövariabeln eller anropar UseUrls
:
webBuilder.UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002");
Kestrel har ett eget API för slutpunktskonfiguration. Mer information finns i Konfigurera slutpunkter för ASP.NET Core Kestrel-webbservern.
WebRoot
Egenskapen IWebHostEnvironment.WebRootPath avgör den relativa sökvägen till appens statiska tillgångar. Om sökvägen inte finns används en no-op filprovider.
Nyckel: webroot
typ: string
standard: Standardvärdet är wwwroot
. Sökvägen till {content root}/wwwroot måste finnas.
Miljövariabel: {PREFIX_}WEBROOT
Om du vill ange det här värdet använder du miljövariabeln eller anropar UseWebRoot
på IWebHostBuilder
:
webBuilder.UseWebRoot("public");
Mer information finns i:
Hantera värdlivslängden
Anropa metoder för den inbyggda IHost-implementeringen för att starta och stoppa appen. Dessa metoder påverkar alla IHostedService implementeringar som är registrerade i tjänstcontainern.
Skillnaden mellan Run*
och Start*
metoder är att Run*
metoder väntar på att värden ska slutföra innan de återvänder, medan Start*
metoder återvänder omedelbart. De Run*
metoderna används vanligtvis i konsolappar, medan de Start*
metoderna vanligtvis används i långvariga tjänster.
Springa
Run kör appen och blockerar den anropande tråden tills värden stängs ner.
RunAsync
RunAsync kör appen och returnerar en Task som slutförs när annulleringstoken eller avstängningen utlöses.
RunConsoleAsync
RunConsoleAsync aktiverar konsolstöd, skapar och startar värden och väntar på att Ctrl+C/SIGINT (Windows), Ctrl+C (macOS) eller SIGTERM stängs av.
Starta
Start startar värdsystemet synkront.
StartAsync
StartAsync startar värden och returnerar en Task som slutförs när antingen annulleringstoken eller avstängning utlöses.
WaitForStartAsync anropas i början av StartAsync
, som väntar tills den är klar innan den fortsätter. Den här metoden kan användas för att fördröja starten tills den signaleras av en extern händelse.
StopAsync
StopAsync försöker stoppa värden inom den angivna tidsbegränsningen.
VäntaPåAvstängning
WaitForShutdown blockerar den anropande tråden tills avstängningen utlöses av IHostLifetime, till exempel via Ctrl+C/SIGINT (Windows), Ctrl+C (macOS) eller SIGTERM.
WaitForShutdownAsync
WaitForShutdownAsync returnerar en Task som slutförs när avstängningen utlöses via den angivna token och anropar StopAsync.
Extern kontroll
Direkt kontroll över värdlivslängden kan uppnås med metoder som kan anropas externt:
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));
}
}
}
Mallarna ASP.NET Core skapar en .NET Core Generic Host (HostBuilder).
Den här artikeln innehåller information om hur du använder .NET Generic Host i ASP.NET Core. Information om hur du använder .NET Generic Host i konsolappar finns i .NET Generic Host.
Värddefinition
En värd är ett objekt som kapslar in en apps resurser, till exempel:
- Beroendeinjektion (DI)
- Skogsavverkning
- Konfiguration
-
IHostedService
implementeringar
När en värd startar anropas IHostedService.StartAsync för varje implementering av IHostedService som registrerats i tjänstcontainerns samling värdbaserade tjänster. I en webbapp är en av de IHostedService
implementeringarna en webbtjänst som startar en HTTP-serverimplementering.
Den främsta orsaken till att inkludera alla appens beroende resurser i ett objekt är livslängdshantering: kontroll över appstart och graciös avstängning.
Konfigurera en värd
Hosten konfigureras, byggs och körs vanligtvis av kod i klassen Program
. Metoden Main
:
- Anropar en
CreateHostBuilder
metod för att skapa och konfigurera ett builder-objekt. - Anropar
Build
- ochRun
-metoder på builder-objektet.
Webbmallarna ASP.NET Core genererar följande kod för att skapa en allmän värd:
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>();
});
}
Följande kod skapar en allmän värd med hjälp av en icke-HTTP-arbetsbelastning. Implementeringen IHostedService
läggs till i DI-containern:
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>();
});
}
För en HTTP-arbetsbelastning är metoden Main
samma men CreateHostBuilder
anropar ConfigureWebHostDefaults
:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Föregående kod genereras av ASP.NET Core-mallar.
Om appen använder Entity Framework Core ändrar du inte namnet eller signaturen för metoden CreateHostBuilder
. Verktygen Entity Framework Core förväntar sig att hitta en CreateHostBuilder
metod som konfigurerar värden utan att starta appen. Mer information finns i Design-time DbContext Creation.
Standardinställningar för builder
Metod CreateDefaultBuilder:
- Anger innehållsroten till sökvägen som returneras av GetCurrentDirectory.
- Läser in värdkonfiguration från:
- Miljövariabler med prefixet
DOTNET_
. - Kommandoradsargument.
- Miljövariabler med prefixet
- Läser in appkonfiguration från:
-
appsettings.json
. -
appsettings.{Environment}.json
. -
Användarhemligheter när appen körs i den
Development
miljön. - Miljövariabler.
- Kommandoradsargument.
-
- Lägger till följande loggning leverantörer:
- Konsol
- Felsöka
- EventSource
- EventLog (endast när du kör på Windows)
- Aktiverar omfångsverifiering och beroendeverifiering när miljön är utvecklingsmiljö.
Metoden ConfigureWebHostDefaults
:
- Läser in värdkonfiguration från miljövariabler med prefixet
ASPNETCORE_
. - Anger Kestrel server som webbserver och konfigurerar den med hjälp av appens värdkonfigurationsproviders. Standardalternativen för Kestrel-servern finns i Kestrel webbserver i ASP.NET Core.
- Lägger till mellanprogram för värdfiltrering.
- Lägger till vidarebefordrade huvudmellanprogram om
ASPNETCORE_FORWARDEDHEADERS_ENABLED
är lika medtrue
. - Aktiverar IIS-integrering. Standardalternativen för IIS finns i Host ASP.NET Core on Windows with IIS.
I avsnitten Inställningar för alla apptyper och Inställningar för webbappar senare i den här artikeln visas hur du åsidosätter standardinställningarna för byggverktyget.
Ramverksbaserade tjänster
Följande tjänster registreras automatiskt:
Mer information om ramverkstjänster finns i Beroendeinmatning i ASP.NET Core.
IHostApplicationLifetime
Injicera tjänsten IHostApplicationLifetime (tidigare IApplicationLifetime
) i vilken klass som helst för att hantera uppgifter efter start och graciös avstängning. Tre egenskaper i gränssnittet är annulleringstoken som används för att registrera metoder för att starta och stoppa apphändelser. Gränssnittet innehåller även en StopApplication
-metod.
Följande exempel är en IHostedService
implementering som registrerar IHostApplicationLifetime
händelser:
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
}
}
IHostLifetime
IHostLifetime-implementeringen styr när värdenheten startar och när denna stoppas. Den senast registrerade implementeringen används.
Microsoft.Extensions.Hosting.Internal.ConsoleLifetime
är standardimplementeringen IHostLifetime
.
ConsoleLifetime
:
- Lyssnar efter Ctrl+C/SIGINT (Windows), Ctrl+C (macOS) eller SIGTERM och anropar StopApplication för att starta avstängningsprocessen.
- Avblockera tillägg som RunAsync och WaitForShutdownAsync.
IHostEnvironment
Mata in IHostEnvironment-tjänsten i en klass för att få information om följande inställningar:
Webbappar implementerar IWebHostEnvironment
-gränssnittet, som ärver IHostEnvironment
och lägger till WebRootPath-.
Värdkonfiguration
Värdkonfigurationen används för egenskaperna för implementeringen IHostEnvironment.
Värdkonfigurationen är tillgänglig från HostBuilderContext.Configuration inne i ConfigureAppConfiguration. Efter ConfigureAppConfiguration
ersätts HostBuilderContext.Configuration
med appkonfigurationen.
Om du vill lägga till värdkonfiguration anropar du ConfigureHostConfiguration på IHostBuilder
.
ConfigureHostConfiguration
kan anropas flera gånger med additiva resultat. Värden använder det alternativ som anger ett värde sist på en viss nyckel.
Miljövariabelprovidern med prefixet DOTNET_
och kommandoradsargument ingår i CreateDefaultBuilder
. För webbappar läggs miljövariabelprovidern med prefixet ASPNETCORE_
till. Prefixet tas bort när miljövariablerna läses. Miljövariabelvärdet för ASPNETCORE_ENVIRONMENT
blir till exempel värdkonfigurationsvärdet för den environment
nyckeln.
I följande exempel skapas värdkonfiguration:
// 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);
});
Appkonfiguration
Appkonfigurationen skapas genom att anropa ConfigureAppConfiguration på IHostBuilder
.
ConfigureAppConfiguration
kan anropas flera gånger med additiva resultat. Appen använder det alternativ som anger ett värde sist på en viss nyckel.
Konfigurationen som skapas av ConfigureAppConfiguration
är tillgänglig på HostBuilderContext.Configuration för efterföljande åtgärder och som en tjänst från DI. Värdkonfigurationen läggs också till i appkonfigurationen.
Mer information finns i Configuration i ASP.NET Core.
Inställningar för alla apptyper
I det här avsnittet visas värdinställningar som gäller för både HTTP- och icke-HTTP-arbetsbelastningar. Som standard kan miljövariabler som används för att konfigurera dessa inställningar ha ett DOTNET_
- eller ASPNETCORE_
prefix, som visas i följande konfiguration för platshållaren för {PREFIX_}
.
Applikationsnamn
Egenskapen IHostEnvironment.ApplicationName anges från värdkonfigurationen under värdkonstruktionen.
Nyckel: applicationName
Typ: string
Standard: Namnet på den sammansättning som innehåller appens startpunkt.
Miljövariabel: {PREFIX_}APPLICATIONNAME
Använd miljövariabeln för att ange det här värdet.
ContentRoot
Egenskapen IHostEnvironment.ContentRootPath bestämmer var hostdatorn börjar söka efter innehållsfiler. Om sökvägen inte finns, så startar inte värden.
nyckel: contentRoot
typ: string
Standard: Mappen där appsammansättningen finns.
Miljövariabel: {PREFIX_}CONTENTROOT
Om du vill ange det här värdet använder du miljövariabeln eller anropar UseContentRoot
på IHostBuilder
:
Host.CreateDefaultBuilder(args)
.UseContentRoot("c:\\content-root")
//...
Mer information finns i:
Environmentnamn
Egenskapen IHostEnvironment.EnvironmentName kan anges till valfritt värde. Ramverksdefinierade värden omfattar Development
, Staging
och Production
. Värden är inte skiftlägeskänsliga.
Nyckel: environment
Typ: string
standard: Production
Miljövariabel: {PREFIX_}ENVIRONMENT
Om du vill ange det här värdet använder du miljövariabeln eller anropar UseEnvironment
på IHostBuilder
:
Host.CreateDefaultBuilder(args)
.UseEnvironment("Development")
//...
ShutdownTimeout
HostOptions.ShutdownTimeout anger tidsgränsen för StopAsync. Standardvärdet är fem sekunder. Under tidsgränsperioden:
- Utlösare IHostApplicationLifetime.ApplicationStopping.
- Försöker stoppa värdbaserade tjänster, loggningsfel för tjänster som inte kan stoppas.
Om tidsgränsen går ut innan alla värdbaserade tjänster stoppas stoppas alla återstående aktiva tjänster när appen stängs av. Tjänsterna stoppas även om de inte har slutfört bearbetningen. Om tjänster kräver mer tid för att stoppa ökar du tidsgränsen.
nyckel: shutdownTimeoutSeconds
typ: int
Standard: 5 sekunder
Miljövariabel: {PREFIX_}SHUTDOWNTIMEOUTSECONDS
Om du vill ange det här värdet använder du miljövariabeln eller konfigurerar HostOptions
. I följande exempel anges tidsgränsen till 20 sekunder:
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.Configure<HostOptions>(option =>
{
option.ShutdownTimeout = System.TimeSpan.FromSeconds(20);
});
});
Inställningar för webbappar
Vissa värdinställningar gäller endast för HTTP-arbetsbelastningar. Som standard kan miljövariabler som används för att konfigurera dessa inställningar ha ett DOTNET_
eller ASPNETCORE_
prefix.
Tilläggsmetoder på objektet IWebHostBuilder
är tillgängliga för de här inställningarna. Kodexempel som visar hur du anropar tilläggsmetoderna förutsätter webBuilder
är en instans av IWebHostBuilder
, som i följande exempel:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.CaptureStartupErrors(true);
webBuilder.UseStartup<Startup>();
});
FångaStartfel
När false
uppstår fel under uppstarten resulterar det i att värden avslutas. När true
fångar undantag under uppstarten och försöker starta servern.
nyckel: captureStartupErrors
typ: bool
(true
/1
eller false
/0
)
Standard: Standardvärdet är false
om inte appen körs med Kestrel bakom IIS, där standardvärdet är true
.
Miljövariabel: {PREFIX_}CAPTURESTARTUPERRORS
Om du vill ange det här värdet använder du konfiguration eller anropar CaptureStartupErrors
:
webBuilder.CaptureStartupErrors(true);
DetaljeradeFel
När den är aktiverad eller när miljön är Development
samlar appen in detaljerade fel.
nyckel: detailedErrors
typ: bool
(true
/1
eller false
/0
)
standard: false
Miljövariabel: {PREFIX_}DETAILEDERRORS
Om du vill ange det här värdet använder du konfiguration eller anropar UseSetting
:
webBuilder.UseSetting(WebHostDefaults.DetailedErrorsKey, "true");
HostingStartupAssemblies
En semikolonavgränsad sträng av startmonteringar för värd som ska laddas vid start. Även om konfigurationsvärdet som standard är en tom sträng inkluderar värdstartssammansättningarna alltid appens sammansättning. När du tillhandahåller värdtjänster för startsammansättningar läggs de till i appens sammansättning för inläsning när appen skapar sina gemensamma tjänster under starten.
Nyckel: hostingStartupAssemblies
typ: string
Standard: Tom sträng
Miljövariabel: {PREFIX_}HOSTINGSTARTUPASSEMBLIES
Om du vill ange det här värdet använder du konfiguration eller anropar UseSetting
:
webBuilder.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "assembly1;assembly2");
HostingStartupExcludeAssemblies
En semikolonavgränsad sträng av startsammansättningar som ska undantas vid start.
nyckel: hostingStartupExcludeAssemblies
typ: string
Standard: Tom sträng
Miljövariabel: {PREFIX_}HOSTINGSTARTUPEXCLUDEASSEMBLIES
Om du vill ange det här värdet använder du konfiguration eller anropar UseSetting
:
webBuilder.UseSetting(WebHostDefaults.HostingStartupExcludeAssembliesKey, "assembly1;assembly2");
HTTPS-port
HTTPS-omdirigeringsporten. Används för att framtvinga HTTPS i och.
nyckel: https_port
typ: string
Standard: Ett standardvärde har inte angetts.
Miljövariabel: {PREFIX_}HTTPS_PORT
Om du vill ange det här värdet använder du konfiguration eller anropar UseSetting
:
webBuilder.UseSetting("https_port", "8080");
PreferHostingUrls
Anger om värden ska lyssna på URL:er som konfigurerats med IWebHostBuilder
istället för de URL:er som konfigurerats med IServer
-implementation.
Nyckel: preferHostingUrls
typ: bool
(true
/1
eller false
/0
)
Standard: false
Miljövariabel: {PREFIX_}PREFERHOSTINGURLS
Om du vill ange det här värdet använder du miljövariabeln eller anropar PreferHostingUrls
:
webBuilder.PreferHostingUrls(true);
PreventHostingStartup
Förhindrar automatisk inläsning av värdstartsamlingar, inklusive värdstartsamlingar som konfigurerats av appens samling. Mer information finns i Använda värdstartssammansättningar i ASP.NET Core.
nyckel: preventHostingStartup
typ: bool
(true
/1
eller false
/0
)
standard: false
Miljövariabel: {PREFIX_}PREVENTHOSTINGSTARTUP
Om du vill ange det här värdet använder du miljövariabeln eller anropar UseSetting
:
webBuilder.UseSetting(WebHostDefaults.PreventHostingStartupKey, "true");
StartupAssembly
Sammansättningen för att söka efter klassen Startup
.
nyckel: startupAssembly
typ: string
Standard: Appens sammansättning
Miljövariabel: {PREFIX_}STARTUPASSEMBLY
Om du vill ange det här värdet använder du miljövariabeln eller anropar UseStartup
.
UseStartup
kan ta ett sammansättningsnamn (string
) eller en typ (TStartup
). Om flera UseStartup
metoder anropas har den sista företräde.
webBuilder.UseStartup("StartupAssemblyName");
webBuilder.UseStartup<Startup>();
UndertryckStatusMeddelanden
När funktionen är aktiverad, döljer den meddelanden om värdstartstatus.
Nyckel: suppressStatusMessages
typ: bool
(true
/1
eller false
/0
)
Standard: false
Miljövariabel: {PREFIX_}SUPPRESSSTATUSMESSAGES
Om du vill ange det här värdet använder du konfiguration eller anropar UseSetting
:
webBuilder.UseSetting(WebHostDefaults.SuppressStatusMessagesKey, "true");
URL
En semikolonavgränsad lista över IP-adresser eller värdadresser med portar och protokoll som servern ska lyssna på efter begäranden. Till exempel http://localhost:123
. Använd "*" för att ange att servern ska lyssna efter begäranden på alla IP-adresser eller värdnamn med den angivna porten och protokollet (till exempel http://*:5000
). Protokollet (http://
eller https://
) måste ingå i varje URL. Format som stöds varierar mellan servrar.
nyckel: urls
typ: string
standard: http://localhost:5000
och https://localhost:5001
Miljövariabel: {PREFIX_}URLS
Om du vill ange det här värdet använder du miljövariabeln eller anropar UseUrls
:
webBuilder.UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002");
Kestrel har ett eget API för slutpunktskonfiguration. Mer information finns i Kestrel webbserver i ASP.NET Core.
WebRoot
Egenskapen IWebHostEnvironment.WebRootPath avgör den relativa sökvägen till appens statiska tillgångar. Om sökvägen inte finns används en no-op filprovider.
nyckel: webroot
typ: string
Standardinställning: Standardvärdet är wwwroot
. Sökvägen till {content root}/wwwroot måste finnas.
Miljövariabel: {PREFIX_}WEBROOT
Om du vill ange det här värdet använder du miljövariabeln eller anropar UseWebRoot
på IWebHostBuilder
:
webBuilder.UseWebRoot("public");
Mer information finns i:
Hantera värdlivslängden
Anropa metoder för den inbyggda IHost-implementeringen för att starta och stoppa appen. Dessa metoder påverkar alla IHostedService implementeringar som är registrerade i tjänstcontainern.
Skillnaden mellan Run*
- och Start*
-metoder är att Run*
-metoder väntar tills värden har slutfört sin uppgift innan de returneras, medan Start*
-metoder returneras omedelbart. De Run*
metoderna används vanligtvis i konsolappar, medan de Start*
metoderna vanligtvis används i långvariga tjänster.
Springa
Run kör appen och blockerar den anropande tråden tills värden stängs ned.
RunAsync
RunAsync kör appen och returnerar en Task som slutförs när annulleringstoken eller avstängningen utlöses.
RunConsoleAsync
RunConsoleAsync aktiverar konsolstöd, skapar och startar värden och väntar på att Ctrl+C/SIGINT (Windows), Ctrl+C (macOS) eller SIGTERM stängs av.
Starta
Start startar värden synkront.
StartAsync
StartAsync startar upp värdprocessen och returnerar en Task som slutförs när avbryter eller avstängningen triggas.
WaitForStartAsync anropas i början av StartAsync
, som väntar tills den är klar innan den fortsätter vidare. Den här metoden kan användas för att fördröja starten tills den signaleras av en extern händelse.
StopAsync
StopAsync försöker stoppa värden inom den angivna tidsgränsen.
VäntaPåAvstängning
WaitForShutdown blockerar den anropande tråden tills avstängningen utlöses av IHostLifetime, till exempel via Ctrl+C/SIGINT (Windows), Ctrl+C (macOS) eller SIGTERM.
WaitForShutdownAsync
WaitForShutdownAsync returnerar en Task som slutförs när avstängningen utlöses via den angivna tokenen och anropar StopAsync.
Extern kontroll
Direkt kontroll över värdlivslängden kan uppnås med metoder som kan anropas externt:
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));
}
}
}
Ytterligare resurser
- Bakgrundsaktiviteter med värdbaserade tjänster i ASP.NET Core
- GitHub-länk till allmän värdkälla
Anteckning
Dokumentationslänkar till .NET-referenskällan läser vanligtvis in lagringsplatsens standardgren, vilket representerar den aktuella utvecklingen för nästa version av .NET. Om du vill välja en tagg för en specifik version använder du listrutan Växla grenar eller taggar. Mer information finns i Så här väljer du en versionstagg för ASP.NET Core-källkod (dotnet/AspNetCore.Docs #26205).
ASP.NET Core