Generischer .NET-Host in ASP.NET Core
Hinweis
Dies ist nicht die neueste Version dieses Artikels. Informationen zum aktuellen Release finden Sie in der .NET 8-Version dieses Artikels.
Warnung
Diese Version von ASP.NET Core wird nicht mehr unterstützt. Weitere Informationen finden Sie in der Supportrichtlinie für .NET und .NET Core. Informationen zum aktuellen Release finden Sie in der .NET 8-Version dieses Artikels.
Wichtig
Diese Informationen beziehen sich auf ein Vorabversionsprodukt, das vor der kommerziellen Freigabe möglicherweise noch wesentlichen Änderungen unterliegt. Microsoft gibt keine Garantie, weder ausdrücklich noch impliziert, hinsichtlich der hier bereitgestellten Informationen.
Informationen zum aktuellen Release finden Sie in der .NET 8-Version dieses Artikels.
Dieser Artikel stellt Informationen zur Verwendung des generischen .NET-Hosts in ASP.NET Core bereit.
Mit den ASP.NET Core-Vorlagen werden WebApplicationBuilder und WebApplication erstellt, die eine optimierte Möglichkeit zum Konfigurieren und Ausführen von Webanwendungen ohne eine Startup
-Klasse bieten. Weitere Informationen zu WebApplicationBuilder
und WebApplication
finden Sie unter WebApplicationBuilder
.
Informationen zur Verwendung des generischen .NET-Hosts in Konsolen-Apps finden Sie unter Generischer .NET-Host.
Hostdefinition
Der Host ist ein Objekt, das alle Ressourcen der App kapselt, z. B.:
- Abhängigkeitsinjektion
- Protokollierung
- Konfiguration
IHostedService
-Implementierungen
Beim Starten eines Hosts wird IHostedService.StartAsync für jede Implementierung von IHostedService aufgerufen, die in der Sammlung gehosteter Dienste des Dienstcontainers registriert ist. In einer Web-App ist eine der IHostedService
-Implementierungen ein Webdienst, der eine IHostedService
startet.
Die Einbindung aller voneinander abhängigen Ressourcen der App in ein Objekt ermöglicht die Kontrolle über den Start der Anwendung und das ordnungsgemäße Herunterfahren.
Einrichten eines Hosts
Der Host wird in der Regel per Code in Program.cs
konfiguriert, erstellt und ausgeführt. Der folgende Code erstellt einen Host mit einer IHostedService
-Implementierung, die dem DI-Container hinzugefügt wird:
await Host.CreateDefaultBuilder(args)
.ConfigureServices(services =>
{
services.AddHostedService<SampleHostedService>();
})
.Build()
.RunAsync();
Rufen Sie für eine HTTP-Workload ConfigureWebHostDefaults nach CreateDefaultBuilder auf:
await Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.Build()
.RunAsync();
Standardeinstellungen für den Generator
Die CreateDefaultBuilder-Methode:
- Legt das Inhaltsstammverzeichnis auf den Pfad fest, der von GetCurrentDirectory zurückgegeben wird.
- Lädt Hostkonfiguration aus:
- Umgebungsvariablen mit dem Präfix
DOTNET_
. - Befehlszeilenargumenten
- Umgebungsvariablen mit dem Präfix
- Lädt App-Konfiguration aus:
appsettings.json
.appsettings.{Environment}.json
.- Vertraulichen Benutzerdaten, wenn die App in der
Development
-Umgebung ausgeführt wird - Umgebungsvariablen.
- Befehlszeilenargumenten
- Fügt die folgenden Protokollierungsanbieter hinzu:
- Konsole
- Debuggen
- EventSource
- EventLog (nur bei Ausführung unter Windows)
- Aktiviert Bereichsvalidierung und Abhängigkeitsüberprüfung, wenn es sich um eine Entwicklungsumgebung handelt.
Die ConfigureWebHostDefaults-Methode:
- Lädt Hostkonfiguration aus Umgebungsvariablen mit dem Präfix
ASPNETCORE_
. - Legt den Kestrel-Server als Webserver fest und konfiguriert ihn mithilfe der Hostkonfigurationsanbieter der App. Die Standardoptionen des Kestrel-Servers finden Sie unter Kestrel.
- Fügt Middleware zum Filtern von Hosts hinzu.
- Fügt Middleware für weitergeleitete Header hinzu, wenn
ASPNETCORE_FORWARDEDHEADERS_ENABLED
den Werttrue
aufweist. - Ermöglicht die Integration von IIS. Informationen zu den IIS-Standardoptionen finden Sie unter Hosten von ASP.NET Core unter Windows mit IIS.
In den Abschnitten Einstellungen für alle App-Typen und Einstellungen für Web-Apps weiter unten in diesem Artikel wird beschrieben, wie die Standardeinstellungen des Generators außer Kraft gesetzt werden.
Von Frameworks bereitgestellte Dienste
Die folgenden Dienste werden automatisch registriert:
Weitere Informationen zu vom Framework bereitgestellten Diensten finden Sie unter Abhängigkeitsinjektion in ASP.NET Core.
IHostApplicationLifetime
Fügt den IHostApplicationLifetime-Dienst (vorher IApplicationLifetime
-Dienst) in eine beliebige Klasse ein, um die Aktivitäten nach dem Starten und die Aufgaben für ordnungsgemäßes Herunterfahren zu verarbeiten. Bei drei der Eigenschaften der Schnittstelle handelt es sich um Abbruchtokens, die zum Registrieren von Ereignishandlermethoden zum Starten und Beenden von Apps verwendet werden. Die Schnittstelle umfasst außerdem eine StopApplication
-Methode, mit der Apps ein ordnungsgemäßes Herunterfahren anfordern können.
Beim ordnungsgemäßen Herunterfahren führt der Host die folgenden Aufgaben aus:
- Er löst die ApplicationStopping-Ereignishandler aus, wodurch die App Logik ausführen kann, bevor das Herunterfahren eingeleitet wird.
- Der Host beendet den Server, wodurch neue Verbindungen deaktiviert werden. Der Server wartet auf den Abschluss von Anforderungen für vorhandene Verbindungen, solange das Timeout für das Herunterfahren dies zulässt. Der Server sendet bei weiteren Anforderungen für vorhandene Verbindungen den Header zur Verbindungstrennung.
- Der Host löst die ApplicationStopped-Ereignishandler aus, wodurch die App nach dem Herunterfahren Logik ausführen kann.
Das folgende Beispiel zeigt eine IHostedService
-Implementierung, die IHostApplicationLifetime
-Ereignishandler registriert:
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
Die IHostLifetime-Implementierung steuert, wann der Host gestartet und beendet wird. Die zuletzt registrierte Implementierung wird verwendet.
Microsoft.Extensions.Hosting.Internal.ConsoleLifetime
ist die IHostLifetime
-Standardimplementierung. ConsoleLifetime
:
- Lauscht auf STRG+C/SIGINT (Windows), ⌘+C (macOS) oder SIGTERM und ruft StopApplication auf, um den Vorgang zum Herunterfahren einzuleiten.
- Hebt die Blockierung von Erweiterungen wie RunAsync und WaitForShutdownAsync auf.
IHostEnvironment
Fügt den IHostEnvironment-Dienst in eine Klasse ein, um Informationen über die folgenden Einstellungen abzurufen:
Web-Apps implementieren die IWebHostEnvironment
-Schnittstelle, die IHostEnvironment
erbt und IWebHostEnvironment
hinzufügt.
Konfiguration des Hosts
Die Hostkonfiguration wird für die Eigenschaften der IHostEnvironment-Implementierung verwendet.
Die Hostkonfiguration ist über HostBuilderContext.Configuration in ConfigureAppConfiguration verfügbar. Nach ConfigureAppConfiguration
wird HostBuilderContext.Configuration
durch die App-Konfiguration ersetzt.
Rufen Sie ConfigureHostConfiguration für IHostBuilder
auf, um die Hostkonfiguration hinzuzufügen. ConfigureHostConfiguration
kann mehrfach mit additiven Ergebnissen aufgerufen werden. Der Host verwendet die Option, die zuletzt einen Wert für einen bestimmten Schlüssel festlegt.
Der Umgebungsvariablenanbieter mit dem Präfix DOTNET_
und die Befehlszeilenargumente sind in CreateDefaultBuilder
enthalten. Für Web-Apps wird der Umgebungsvariablenanbieter mit dem Präfix ASPNETCORE_
hinzugefügt. Das Präfix wird entfernt, wenn die Umgebungsvariablen gelesen werden. Der Wert der Umgebungsvariable für ASPNETCORE_ENVIRONMENT
wird z. B. der Hostkonfigurationswert für den environment
-Schlüssel.
Im folgenden Beispiel wird eine Hostkonfiguration erstellt:
Host.CreateDefaultBuilder(args)
.ConfigureHostConfiguration(hostConfig =>
{
hostConfig.SetBasePath(Directory.GetCurrentDirectory());
hostConfig.AddJsonFile("hostsettings.json", optional: true);
hostConfig.AddEnvironmentVariables(prefix: "PREFIX_");
hostConfig.AddCommandLine(args);
});
App-Konfiguration
Die App-Konfiguration wird durch Aufrufen von ConfigureAppConfiguration für IHostBuilder
erstellt. ConfigureAppConfiguration
kann mehrfach mit additiven Ergebnissen aufgerufen werden. Die App verwendet die Option, die zuletzt einen Wert für einen bestimmten Schlüssel festlegt.
Die von ConfigureAppConfiguration
erstellte Konfiguration steht für nachfolgende Vorgänge unter HostBuilderContext.Configuration und als Dienst über DI zur Verfügung. Die Hostkonfiguration wird ebenfalls der App-Konfiguration hinzugefügt.
Weitere Informationen finden Sie unter Konfiguration in ASP.NET Core.
Einstellungen für alle App-Typen
In diesem Abschnitt werden Hosteinstellungen aufgeführt, die sowohl für HTTP- als auch für Nicht-HTTP-Workloads gelten. Standardmäßig können die zum Konfigurieren dieser Einstellungen verwendeten Umgebungsvariablen ein DOTNET_
- oder ASPNETCORE_
-Präfix aufweisen, das in der folgenden Liste der Einstellungen als Platzhalter {PREFIX_}
angezeigt wird. Weitere Informationen finden Sie im Abschnitt Standardeinstellungen für den Generator und Konfiguration: Umgebungsvariablen.
ApplicationName
Die Eigenschaft IHostEnvironment.ApplicationName wird über die Hostkonfiguration während der Hosterstellung festgelegt.
Schlüssel: applicationName
Typ:string
Standard: Der Name der Assembly, die den Einstiegspunkt der App enthält.
Umgebungsvariable: {PREFIX_}APPLICATIONNAME
Verwenden Sie die Umgebungsvariable, um diesen Wert festzulegen.
ContentRoot
Die Eigenschaft IHostEnvironment.ContentRootPath bestimmt, wo der Host mit der Suche nach Inhaltsdateien beginnt. Wenn der Pfad nicht vorhanden ist, kann der Host nicht gestartet werden.
Schlüssel: contentRoot
Typ:string
Standard: Der Ordner, in dem die App-Assembly gespeichert ist.
Umgebungsvariable: {PREFIX_}CONTENTROOT
Verwenden Sie die Umgebungsvariable, oder rufen Sie UseContentRoot
für IHostBuilder
auf, um diesen Wert festzulegen:
Host.CreateDefaultBuilder(args)
.UseContentRoot("/path/to/content/root")
// ...
Weitere Informationen finden Sie unter:
EnvironmentName
Die Eigenschaft IHostEnvironment.EnvironmentName kann auf einen beliebigen Wert festgelegt werden. Zu den durch Frameworks definierten Werten zählen Development
, Staging
und Production
. Die Groß-/Kleinschreibung wird bei Werten nicht beachtet.
Schlüssel: environment
Typ:string
Standard: Production
Umgebungsvariable: {PREFIX_}ENVIRONMENT
Verwenden Sie die Umgebungsvariable, oder rufen Sie UseEnvironment
für IHostBuilder
auf, um diesen Wert festzulegen:
Host.CreateDefaultBuilder(args)
.UseEnvironment("Development")
// ...
ShutdownTimeout
HostOptions.ShutdownTimeout legt den Timeout für StopAsync fest. Der Standardwert ist 30 Sekunden. Während des Zeitlimits verhält sich der Host folgendermaßen:
- Er löst IHostApplicationLifetime.ApplicationStopping aus.
- Er versucht, gehostete Dienste zu beenden und protokolliert Fehler für Dienste, die nicht beendet werden können.
Wenn das Zeitlimit abläuft bevor alle gehosteten Dienste beendet sind, werden alle verbleibenden aktiven Dienste beendet, wenn die App herunterfährt. Die Dienste werden beendet, selbst wenn die Verarbeitung noch nicht abgeschlossen ist. Wenn die Dienste mehr Zeit zum Beenden benötigen, erhöhen Sie den Timeoutwert.
Schlüssel: shutdownTimeoutSeconds
Typ:int
Standard: 30 Sekunden
Umgebungsvariable: {PREFIX_}SHUTDOWNTIMEOUTSECONDS
Verwenden Sie die Umgebungsvariable, oder konfigurieren Sie HostOptions
, um diesen Wert festzulegen. Im folgenden Beispiel wird das Zeitlimit auf 20 Sekunden festgelegt:
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.Configure<HostOptions>(options =>
{
options.ShutdownTimeout = TimeSpan.FromSeconds(20);
});
});
Deaktivieren des Neuladens der App-Konfiguration bei Änderungen
Die Dateien appsettings.json
und appsettings.{Environment}.json
werden standardmäßig neu geladen, wenn die Datei geändert wird. Zum Deaktivieren dieses Verhaltens in ASP.NET Core 5.0 oder höher müssen Sie den Schlüssel hostBuilder:reloadConfigOnChange
auf false
festlegen.
Schlüssel: hostBuilder:reloadConfigOnChange
Typ: bool
(true
oder false
)
Standard: true
Befehlszeilenargument: hostBuilder:reloadConfigOnChange
Umgebungsvariable: {PREFIX_}hostBuilder:reloadConfigOnChange
Warnung
Das Trennzeichen :
funktioniert nicht auf allen Plattformen mit den hierarchischen Schlüsseln von Umgebungsvariablen. Weitere Informationen finden Sie unter Umgebungsvariablen.
Einstellungen für Web-Apps
Einige Hosteinstellungen gelten nur für HTTP-Workloads. Standardmäßig können die zum Konfigurieren dieser Einstellungen verwendeten Umgebungsvariablen ein DOTNET_
- oder ASPNETCORE_
-Präfix aufweisen, das in der folgenden Liste der Einstellungen als Platzhalter {PREFIX_}
angezeigt wird.
Für diese Einstellungen sind Erweiterungsmethoden in IWebHostBuilder
verfügbar. In den Codebeispielen, die zeigen, wie Sie die Erweiterungsmethoden aufrufen können, wird davon ausgegangen, dass webBuilder
eine Instanz von IWebHostBuilder
ist. Sehen Sie hierzu das folgende Beispiel:
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
// ...
});
CaptureStartupErrors
Wenn diese false
ist, führen Fehler beim Start zum Beenden des Hosts. Wenn diese true
ist, erfasst der Host Ausnahmen während des Starts und versucht, den Server zu starten.
Schlüssel: captureStartupErrors
Typ: bool
(true
/1
oder false
/0
)
Standard: Die Standardeinstellung ist false
, wenn die App nicht mit Kestrel im Hintergrund von IIS ausgeführt wird, dann ist diese true
.
Umgebungsvariable: {PREFIX_}CAPTURESTARTUPERRORS
Verwenden Sie die Konfiguration, oder rufen Sie CaptureStartupErrors
auf, um diesen Wert festzulegen:
webBuilder.CaptureStartupErrors(true);
DetailedErrors
Wenn diese Einstellung aktiviert ist oder die Umgebung auf Development
festgelegt ist, erfasst die App detaillierte Fehler.
Schlüssel: detailedErrors
Typ: bool
(true
/1
oder false
/0
)
Standard: false
Umgebungsvariable: {PREFIX_}DETAILEDERRORS
Verwenden Sie die Konfiguration, oder rufen Sie UseSetting
auf, um diesen Wert festzulegen:
webBuilder.UseSetting(WebHostDefaults.DetailedErrorsKey, "true");
HostingStartupAssemblies
Eine durch Semikolons getrennte Zeichenfolge der Hostingstartassemblys, die beim Start geladen werden soll. Obwohl der Konfigurationswert standardmäßig auf eine leere Zeichenfolge festgelegt ist, enthalten die Hostingstartassemblys immer die Assembly der App. Wenn Hostingstartassemblys bereitgestellt werden, werden diese zur Assembly der App hinzugefügt, damit diese geladen werden, wenn die App während des Starts die allgemeinen Dienste erstellt.
Schlüssel: hostingStartupAssemblies
Typ:string
Standard: Leere Zeichenfolge
Umgebungsvariable: {PREFIX_}HOSTINGSTARTUPASSEMBLIES
Verwenden Sie die Konfiguration, oder rufen Sie UseSetting
auf, um diesen Wert festzulegen:
webBuilder.UseSetting(
WebHostDefaults.HostingStartupAssembliesKey, "assembly1;assembly2");
HostingStartupExcludeAssemblies
Eine durch Semikolons getrennte Zeichenfolge der Hostingstartassemblys, die beim Start ausgeschlossen werden sollen.
Schlüssel: hostingStartupExcludeAssemblies
Typ:string
Standard: Leere Zeichenfolge
Umgebungsvariable: {PREFIX_}HOSTINGSTARTUPEXCLUDEASSEMBLIES
Verwenden Sie die Konfiguration, oder rufen Sie UseSetting
auf, um diesen Wert festzulegen:
webBuilder.UseSetting(
WebHostDefaults.HostingStartupExcludeAssembliesKey, "assembly1;assembly2");
HTTPS_Port
Legen Sie den HTTPS-Port fest, zu dem umgeleitet werden soll, wenn Sie eine Nicht-HTTPS-Verbindung erhalten. Wird in Erzwingen von HTTPS verwendet. Diese Einstellung bewirkt nicht, dass der Server auf den spezifischen Port achtet. Das heißt, es ist möglich, Anforderungen versehentlich an einen ungenutzten Port umzuleiten.
Schlüssel: https_port
Typ: string
Standard: Es ist kein Standardwert festgelegt.
Umgebungsvariable: {PREFIX_}HTTPS_PORT
Verwenden Sie die Konfiguration, oder rufen Sie UseSetting
auf, um diesen Wert festzulegen:
webBuilder.UseSetting("https_port", "8080");
HTTPS_Ports
Die Ports, auf die die HTTPS-Verbindungen achten sollen.
Schlüssel: https_ports
Typ:string
Standard: Es ist kein Standardwert festgelegt.
Umgebungsvariable: {PREFIX_}HTTPS_PORTS
Verwenden Sie die Konfiguration, oder rufen Sie UseSetting
auf, um diesen Wert festzulegen:
webBuilder.UseSetting("https_ports", "8080");
PreferHostingUrls
Gibt an, ob der Host auf die URLs lauschen soll, die mit IWebHostBuilder
konfiguriert wurden, anstatt auf die URLs zu lauschen, die mit der IServer
-Implementierung konfiguriert wurden.
Schlüssel: preferHostingUrls
Typ: bool
(true
/1
oder false
/0
)
Standard: false
Umgebungsvariable: {PREFIX_}PREFERHOSTINGURLS
Verwenden Sie die Umgebungsvariable, oder rufen Sie PreferHostingUrls
auf, um diesen Wert festzulegen:
webBuilder.PreferHostingUrls(true);
PreventHostingStartup
Verhindert das automatische Laden der Hostingstartassemblys, einschließlich denen, die von der Assembly der App konfiguriert wurden. Weitere Informationen finden Sie unter Verwenden von Hostingstartassemblys in ASP.NET Core.
Schlüssel: preventHostingStartup
Typ: bool
(true
/1
oder false
/0
)
Standard: false
Umgebungsvariable: {PREFIX_}PREVENTHOSTINGSTARTUP
Verwenden Sie die Umgebungsvariable, oder rufen Sie UseSetting
auf, um diesen Wert festzulegen:
webBuilder.UseSetting(WebHostDefaults.PreventHostingStartupKey, "true");
StartupAssembly
Die Assembly, die nach der Startup
-Klasse suchen soll.
Schlüssel: startupAssembly
Typ:string
Standard: Die Assembly der App
Umgebungsvariable: {PREFIX_}STARTUPASSEMBLY
Verwenden Sie die Umgebungsvariable, oder rufen Sie UseStartup
auf, um diesen Wert festzulegen. UseStartup
kann einen Assemblynamen (string
) oder einen Typ (TStartup
) annehmen. Wenn mehrere UseStartup
-Methoden aufgerufen werden, hat die letzte Vorrang.
webBuilder.UseStartup("StartupAssemblyName");
webBuilder.UseStartup<Startup>();
SuppressStatusMessages
Wenn diese Option aktiviert ist, werden Statusmeldungen zum Hostingstart unterdrückt.
Schlüssel: suppressStatusMessages
Typ: bool
(true
/1
oder false
/0
)
Standard: false
Umgebungsvariable: {PREFIX_}SUPPRESSSTATUSMESSAGES
Verwenden Sie die Konfiguration, oder rufen Sie UseSetting
auf, um diesen Wert festzulegen:
webBuilder.UseSetting(WebHostDefaults.SuppressStatusMessagesKey, "true");
URLs
Eine durch Semikolons getrennte Liste mit IP-Adressen oder Hostadressen mit Ports und Protokollen, denen der Server für Anforderungen lauschen soll. Beispielsweise http://localhost:123
. Verwenden Sie „*“, um anzugeben, dass der Server mithilfe des angegebenen Ports und Protokolls (z. B. http://*:5000
) den Anfragen aller IP-Adressen oder Hostnamen lauschen soll. Das Protokoll (http://
oder https://
) muss in jeder URL enthalten sein. Die unterstützten Formate variieren bei den verschiedenen Servern.
Schlüssel: urls
Typ:string
Standard: http://localhost:5000
und https://localhost:5001
Umgebungsvariable: {PREFIX_}URLS
Verwenden Sie die Umgebungsvariable, oder rufen Sie UseUrls
auf, um diesen Wert festzulegen:
webBuilder.UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002");
Kestrel verfügt über eine eigene API für die Endpunktkonfiguration. Weitere Informationen finden Sie unter Konfigurieren von Endpunkten für den Kestrel-Webserver von ASP.NET Core.
WebRoot
Die IWebHostEnvironment.WebRootPath--Eigenschaft bestimmt den relativen Pfad zu den statischen Objekten der App. Wenn der Pfad nicht vorhanden ist, wird ein Dateianbieter ohne Funktion verwendet.
Schlüssel: webroot
Typ:string
Standard: Der Standardwert ist wwwroot
. Der Pfad zu {Inhaltsstammverzeichnis}/wwwroot muss vorhanden sein.
Umgebungsvariable: {PREFIX_}WEBROOT
Verwenden Sie die Umgebungsvariable, oder rufen Sie UseWebRoot
für IWebHostBuilder
auf, um diesen Wert festzulegen:
webBuilder.UseWebRoot("public");
Weitere Informationen finden Sie unter:
Verwalten der Lebensdauer des Hosts
Rufen Sie Methoden für die erstellte IHost-Implementierung auf, um die App zu starten und zu beenden. Diese Methoden wirken sich auf alle IHostedService-Implementierungen aus, die im Dienstcontainer registriert sind.
Der Unterschied zwischen Run*
- und Start*
-Methoden besteht darin, dass Run*
Methoden warten, bis der Host abgeschlossen ist, bevor er zurückgegeben wird, während Start*
-Methoden sofort zurückgegeben werden. Die Run*
-Methoden werden in der Regel in Konsolen-Apps verwendet, während die Start*
-Methoden in der Regel in lang ausgeführten Diensten verwendet werden.
Ausführen
Durch Run wird die App gestartet und der aufrufende Thread blockiert, bis der Host heruntergefahren wird.
RunAsync
Durch RunAsync wird die App ausgeführt und eine Task-Methode ausgegeben, die abgeschlossen wird, wenn das Abbruchtoken oder das Herunterfahren ausgelöst wird.
RunConsoleAsync
RunConsoleAsync aktiviert die Unterstützung der Konsole, erstellt und startet den Host und lauscht auf STRG+C/SIGINT (Windows), ⌘+C (macOS) oder SIGTERM, um das Herunterfahren auszulösen.
Start
Start startet den Host synchron.
StartAsync
Durch StartAsync wird der Host gestartet und eine Task-Methode ausgegeben, die abgeschlossen wird, wenn das Abbruchtoken oder das Herunterfahren ausgelöst wird.
WaitForStartAsync wird am Anfang der StartAsync
-Methode aufgerufen, die den Vorgang erst fortsetzt, wenn sie abgeschlossen ist. Diese Methode kann verwendet werden, um den Start zu verzögern, bis dieser durch ein externes Ereignis eingeleitet wird.
StopAsync
StopAsync versucht, den Host innerhalb des angegebenen Timeouts zu beenden.
WaitForShutdown
WaitForShutdown blockiert den aufrufenden Thread, bis das Herunterfahren durch IHostLifetime, z. B. über STRG+C/SIGINT (Windows), ⌘+C (macOS) oder SIGTERM, ausgelöst wird.
WaitForShutdownAsync
WaitForShutdownAsync gibt eine Task-Methode zurück, die abgeschlossen wird, wenn das Herunterfahren über das angegebene Token ausgelöst wird, und ruft StopAsync auf.
Die ASP.NET Core-Vorlagen erstellen einen generischen .NET Core-Host (HostBuilder).
Dieser Artikel stellt Informationen zur Verwendung des generischen .NET-Hosts in ASP.NET Core bereit. Informationen zur Verwendung des generischen .NET-Hosts in Konsolen-Apps finden Sie unter Generischer .NET-Host.
Hostdefinition
Der Host ist ein Objekt, das alle Ressourcen der App kapselt, z. B.:
- Abhängigkeitsinjektion
- Protokollierung
- Konfiguration
IHostedService
-Implementierungen
Beim Starten eines Hosts wird IHostedService.StartAsync für jede Implementierung von IHostedService aufgerufen, die in der Sammlung gehosteter Dienste des Dienstcontainers registriert ist. In einer Web-App ist eine der IHostedService
-Implementierungen ein Webdienst, der eine IHostedService
startet.
Der wichtigste Grund für das Einschließen aller unabhängigen Ressourcen der App in einem Objekt ist die Verwaltung der Lebensdauer: steuern von Start und ordnungsgemäßem Herunterfahren der App.
Einrichten eines Hosts
Der Host wird in der Regel per Code in der Program
-Klasse konfiguriert, erstellt und ausgeführt. Die Main
-Methode:
- Ruft eine
CreateHostBuilder
-Methode zum Erstellen und Konfigurieren eines Generatorobjekts auf. - Ruft
Build
- undRun
-Methoden für das Generatorobjekt auf.
Die ASP.NET Core-Webvorlagen generieren den folgenden Code zum Erstellen eines Hosts:
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>();
});
}
Der folgende Code erstellt eine Nicht-HTTP-Workload mit einer dem DI-Container hinzugefügten IHostedService
-Implementierung.
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 einen HTTP-Workload ist die Main
-Methode die gleiche, CreateHostBuilder
ruft jedoch ConfigureWebHostDefaults
auf:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Ändern Sie nicht den Namen bzw. die Signatur der CreateHostBuilder
-Methode, wenn die App Entity Framework Core verwendet. Die Entity Framework Core-Tools erwarten eine CreateHostBuilder
-Methode, die den Host konfiguriert, ohne die App auszuführen. Weitere Informationen finden Sie unter DbContext-Instanzerstellung zur Entwurfszeit.
Standardeinstellungen für den Generator
Die CreateDefaultBuilder-Methode:
- Legt das Inhaltsstammverzeichnis auf den Pfad fest, der von GetCurrentDirectory zurückgegeben wird.
- Lädt Hostkonfiguration aus:
- Umgebungsvariablen mit dem Präfix
DOTNET_
. - Befehlszeilenargumenten
- Umgebungsvariablen mit dem Präfix
- Lädt App-Konfiguration aus:
appsettings.json
.appsettings.{Environment}.json
.- Vertraulichen Benutzerdaten, wenn die App in der
Development
-Umgebung ausgeführt wird - Umgebungsvariablen.
- Befehlszeilenargumenten
- Fügt die folgenden Protokollierungsanbieter hinzu:
- Konsole
- Debuggen
- EventSource
- EventLog (nur bei Ausführung unter Windows)
- Aktiviert Bereichsvalidierung und Abhängigkeitsüberprüfung, wenn es sich um eine Entwicklungsumgebung handelt.
Die ConfigureWebHostDefaults-Methode:
- Lädt Hostkonfiguration aus Umgebungsvariablen mit dem Präfix
ASPNETCORE_
. - Legt den Kestrel-Server als Webserver fest und konfiguriert ihn mithilfe der Hostkonfigurationsanbieter der App. Die Standardoptionen des Kestrel-Servers finden Sie unter Kestrel.
- Fügt Middleware zum Filtern von Hosts hinzu.
- Fügt Middleware für weitergeleitete Header hinzu, wenn
ASPNETCORE_FORWARDEDHEADERS_ENABLED
den Werttrue
aufweist. - Ermöglicht die Integration von IIS. Informationen zu den IIS-Standardoptionen finden Sie unter Hosten von ASP.NET Core unter Windows mit IIS.
In den Abschnitten Einstellungen für alle App-Typen und Einstellungen für Web-Apps weiter unten in diesem Artikel wird beschrieben, wie die Standardeinstellungen des Generators außer Kraft gesetzt werden.
Von Frameworks bereitgestellte Dienste
Die folgenden Dienste werden automatisch registriert:
Weitere Informationen zu vom Framework bereitgestellten Diensten finden Sie unter Abhängigkeitsinjektion in ASP.NET Core.
IHostApplicationLifetime
Fügt den IHostApplicationLifetime-Dienst (vorher IApplicationLifetime
-Dienst) in eine beliebige Klasse ein, um die Aktivitäten nach dem Starten und die Aufgaben für ordnungsgemäßes Herunterfahren zu verarbeiten. Bei drei der Eigenschaften der Schnittstelle handelt es sich um Abbruchtokens, die zum Registrieren von Ereignishandlermethoden zum Starten und Beenden von Apps verwendet werden. Die Benutzeroberfläche umfasst auch eine StopApplication
-Methode.
Das folgende Beispiel zeigt eine IHostedService
-Implementierung, die IHostApplicationLifetime
-Ereignisse registriert:
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
Die IHostLifetime-Implementierung steuert, wann der Host gestartet und beendet wird. Die zuletzt registrierte Implementierung wird verwendet.
Microsoft.Extensions.Hosting.Internal.ConsoleLifetime
ist die IHostLifetime
-Standardimplementierung. ConsoleLifetime
:
- Lauscht auf STRG+C/SIGINT (Windows), ⌘+C (macOS) oder SIGTERM und ruft StopApplication auf, um den Vorgang zum Herunterfahren einzuleiten.
- Hebt die Blockierung von Erweiterungen wie RunAsync und WaitForShutdownAsync auf.
IHostEnvironment
Fügt den IHostEnvironment-Dienst in eine Klasse ein, um Informationen über die folgenden Einstellungen abzurufen:
Web-Apps implementieren die IWebHostEnvironment
-Schnittstelle, die IHostEnvironment
erbt und IWebHostEnvironment
hinzufügt.
Konfiguration des Hosts
Die Hostkonfiguration wird für die Eigenschaften der IHostEnvironment-Implementierung verwendet.
Die Hostkonfiguration ist über HostBuilderContext.Configuration in ConfigureAppConfiguration verfügbar. Nach ConfigureAppConfiguration
wird HostBuilderContext.Configuration
durch die App-Konfiguration ersetzt.
Rufen Sie ConfigureHostConfiguration für IHostBuilder
auf, um die Hostkonfiguration hinzuzufügen. ConfigureHostConfiguration
kann mehrfach mit additiven Ergebnissen aufgerufen werden. Der Host verwendet die Option, die zuletzt einen Wert für einen bestimmten Schlüssel festlegt.
Der Umgebungsvariablenanbieter mit dem Präfix DOTNET_
und die Befehlszeilenargumente sind in CreateDefaultBuilder
enthalten. Für Web-Apps wird der Umgebungsvariablenanbieter mit dem Präfix ASPNETCORE_
hinzugefügt. Das Präfix wird entfernt, wenn die Umgebungsvariablen gelesen werden. Der Wert der Umgebungsvariable für ASPNETCORE_ENVIRONMENT
wird z. B. der Hostkonfigurationswert für den environment
-Schlüssel.
Im folgenden Beispiel wird eine Hostkonfiguration erstellt:
// 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);
});
App-Konfiguration
Die App-Konfiguration wird durch Aufrufen von ConfigureAppConfiguration für IHostBuilder
erstellt. ConfigureAppConfiguration
kann mehrfach mit additiven Ergebnissen aufgerufen werden. Die App verwendet die Option, die zuletzt einen Wert für einen bestimmten Schlüssel festlegt.
Die von ConfigureAppConfiguration
erstellte Konfiguration steht für nachfolgende Vorgänge unter HostBuilderContext.Configuration und als Dienst über DI zur Verfügung. Die Hostkonfiguration wird ebenfalls der App-Konfiguration hinzugefügt.
Weitere Informationen finden Sie unter Konfiguration in ASP.NET Core.
Einstellungen für alle App-Typen
In diesem Abschnitt werden Hosteinstellungen aufgeführt, die sowohl für HTTP- als auch für Nicht-HTTP-Workloads gelten. Standardmäßig können die zum Konfigurieren dieser Einstellungen verwendeten Umgebungsvariablen ein DOTNET_
- oder ASPNETCORE_
-Präfix aufweisen, das in der folgenden Liste der Einstellungen als Platzhalter {PREFIX_}
angezeigt wird. Weitere Informationen finden Sie im Abschnitt Standardeinstellungen für den Generator und Konfiguration: Umgebungsvariablen.
ApplicationName
Die Eigenschaft IHostEnvironment.ApplicationName wird über die Hostkonfiguration während der Hosterstellung festgelegt.
Schlüssel: applicationName
Typ:string
Standard: Der Name der Assembly, die den Einstiegspunkt der App enthält.
Umgebungsvariable: {PREFIX_}APPLICATIONNAME
Verwenden Sie die Umgebungsvariable, um diesen Wert festzulegen.
ContentRoot
Die Eigenschaft IHostEnvironment.ContentRootPath bestimmt, wo der Host mit der Suche nach Inhaltsdateien beginnt. Wenn der Pfad nicht vorhanden ist, kann der Host nicht gestartet werden.
Schlüssel: contentRoot
Typ:string
Standard: Der Ordner, in dem die App-Assembly gespeichert ist.
Umgebungsvariable: {PREFIX_}CONTENTROOT
Verwenden Sie die Umgebungsvariable, oder rufen Sie UseContentRoot
für IHostBuilder
auf, um diesen Wert festzulegen:
Host.CreateDefaultBuilder(args)
.UseContentRoot("c:\\content-root")
//...
Weitere Informationen finden Sie unter:
EnvironmentName
Die Eigenschaft IHostEnvironment.EnvironmentName kann auf einen beliebigen Wert festgelegt werden. Zu den durch Frameworks definierten Werten zählen Development
, Staging
und Production
. Die Groß-/Kleinschreibung wird bei Werten nicht beachtet.
Schlüssel: environment
Typ:string
Standard: Production
Umgebungsvariable: {PREFIX_}ENVIRONMENT
Verwenden Sie die Umgebungsvariable, oder rufen Sie UseEnvironment
für IHostBuilder
auf, um diesen Wert festzulegen:
Host.CreateDefaultBuilder(args)
.UseEnvironment("Development")
//...
ShutdownTimeout
HostOptions.ShutdownTimeout legt den Timeout für StopAsync fest. Der Standardwert beträgt fünf Sekunden. Während des Zeitlimits verhält sich der Host folgendermaßen:
- Er löst IHostApplicationLifetime.ApplicationStopping aus.
- Er versucht, gehostete Dienste zu beenden und protokolliert Fehler für Dienste, die nicht beendet werden können.
Wenn das Zeitlimit abläuft bevor alle gehosteten Dienste beendet sind, werden alle verbleibenden aktiven Dienste beendet, wenn die App herunterfährt. Die Dienste werden beendet, selbst wenn die Verarbeitung noch nicht abgeschlossen ist. Wenn die Dienste mehr Zeit zum Beenden benötigen, erhöhen Sie den Timeoutwert.
Schlüssel: shutdownTimeoutSeconds
Typ:int
Standard: 5 Sekunden
Umgebungsvariable: {PREFIX_}SHUTDOWNTIMEOUTSECONDS
Verwenden Sie die Umgebungsvariable, oder konfigurieren Sie HostOptions
, um diesen Wert festzulegen. Im folgenden Beispiel wird das Zeitlimit auf 20 Sekunden festgelegt:
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.Configure<HostOptions>(option =>
{
option.ShutdownTimeout = System.TimeSpan.FromSeconds(20);
});
});
Deaktivieren des Neuladens der App-Konfiguration bei Änderungen
Die Dateien appsettings.json
und appsettings.{Environment}.json
werden standardmäßig neu geladen, wenn die Datei geändert wird. Zum Deaktivieren dieses Verhaltens in ASP.NET Core 5.0 oder höher müssen Sie den Schlüssel hostBuilder:reloadConfigOnChange
auf false
festlegen.
Schlüssel: hostBuilder:reloadConfigOnChange
Typ: bool
(true
oder false
)
Standard: true
Befehlszeilenargument: hostBuilder:reloadConfigOnChange
Umgebungsvariable: {PREFIX_}hostBuilder:reloadConfigOnChange
Warnung
Das Trennzeichen :
funktioniert nicht auf allen Plattformen mit den hierarchischen Schlüsseln von Umgebungsvariablen. Weitere Informationen finden Sie unter Umgebungsvariablen.
Einstellungen für Web-Apps
Einige Hosteinstellungen gelten nur für HTTP-Workloads. Standardmäßig können die zum Konfigurieren dieser Einstellungen verwendeten Umgebungsvariablen ein DOTNET_
- oder ASPNETCORE_
-Präfix aufweisen, das in der folgenden Liste der Einstellungen als Platzhalter {PREFIX_}
angezeigt wird.
Für diese Einstellungen sind Erweiterungsmethoden in IWebHostBuilder
verfügbar. In den Codebeispielen, die zeigen, wie Sie die Erweiterungsmethoden aufrufen können, wird davon ausgegangen, dass webBuilder
eine Instanz von IWebHostBuilder
ist. Sehen Sie hierzu das folgende Beispiel:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.CaptureStartupErrors(true);
webBuilder.UseStartup<Startup>();
});
CaptureStartupErrors
Wenn diese false
ist, führen Fehler beim Start zum Beenden des Hosts. Wenn diese true
ist, erfasst der Host Ausnahmen während des Starts und versucht, den Server zu starten.
Schlüssel: captureStartupErrors
Typ: bool
(true
/1
oder false
/0
)
Standard: Die Standardeinstellung ist false
, wenn die App nicht mit Kestrel im Hintergrund von IIS ausgeführt wird, dann ist diese true
.
Umgebungsvariable: {PREFIX_}CAPTURESTARTUPERRORS
Verwenden Sie die Konfiguration, oder rufen Sie CaptureStartupErrors
auf, um diesen Wert festzulegen:
webBuilder.CaptureStartupErrors(true);
DetailedErrors
Wenn diese Einstellung aktiviert ist oder die Umgebung auf Development
festgelegt ist, erfasst die App detaillierte Fehler.
Schlüssel: detailedErrors
Typ: bool
(true
/1
oder false
/0
)
Standard: false
Umgebungsvariable: {PREFIX_}DETAILEDERRORS
Verwenden Sie die Konfiguration, oder rufen Sie UseSetting
auf, um diesen Wert festzulegen:
webBuilder.UseSetting(WebHostDefaults.DetailedErrorsKey, "true");
HostingStartupAssemblies
Eine durch Semikolons getrennte Zeichenfolge der Hostingstartassemblys, die beim Start geladen werden soll. Obwohl der Konfigurationswert standardmäßig auf eine leere Zeichenfolge festgelegt ist, enthalten die Hostingstartassemblys immer die Assembly der App. Wenn Hostingstartassemblys bereitgestellt werden, werden diese zur Assembly der App hinzugefügt, damit diese geladen werden, wenn die App während des Starts die allgemeinen Dienste erstellt.
Schlüssel: hostingStartupAssemblies
Typ:string
Standard: Leere Zeichenfolge
Umgebungsvariable: {PREFIX_}HOSTINGSTARTUPASSEMBLIES
Verwenden Sie die Konfiguration, oder rufen Sie UseSetting
auf, um diesen Wert festzulegen:
webBuilder.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "assembly1;assembly2");
HostingStartupExcludeAssemblies
Eine durch Semikolons getrennte Zeichenfolge der Hostingstartassemblys, die beim Start ausgeschlossen werden sollen.
Schlüssel: hostingStartupExcludeAssemblies
Typ:string
Standard: Leere Zeichenfolge
Umgebungsvariable: {PREFIX_}HOSTINGSTARTUPEXCLUDEASSEMBLIES
Verwenden Sie die Konfiguration, oder rufen Sie UseSetting
auf, um diesen Wert festzulegen:
webBuilder.UseSetting(WebHostDefaults.HostingStartupExcludeAssembliesKey, "assembly1;assembly2");
HTTPS_Port
Der HTTPS-Umleitungsport. Wird in Erzwingen von HTTPS verwendet.
Schlüssel: https_port
Typ:string
Standard: Es ist kein Standardwert festgelegt.
Umgebungsvariable: {PREFIX_}HTTPS_PORT
Verwenden Sie die Konfiguration, oder rufen Sie UseSetting
auf, um diesen Wert festzulegen:
webBuilder.UseSetting("https_port", "8080");
PreferHostingUrls
Gibt an, ob der Host auf die URLs lauschen soll, die mit IWebHostBuilder
konfiguriert wurden, anstatt auf die URLs zu lauschen, die mit der IServer
-Implementierung konfiguriert wurden.
Schlüssel: preferHostingUrls
Typ: bool
(true
/1
oder false
/0
)
Standard: false
Umgebungsvariable: {PREFIX_}PREFERHOSTINGURLS
Verwenden Sie die Umgebungsvariable, oder rufen Sie PreferHostingUrls
auf, um diesen Wert festzulegen:
webBuilder.PreferHostingUrls(true);
PreventHostingStartup
Verhindert das automatische Laden der Hostingstartassemblys, einschließlich denen, die von der Assembly der App konfiguriert wurden. Weitere Informationen finden Sie unter Verwenden von Hostingstartassemblys in ASP.NET Core.
Schlüssel: preventHostingStartup
Typ: bool
(true
/1
oder false
/0
)
Standard: false
Umgebungsvariable: {PREFIX_}PREVENTHOSTINGSTARTUP
Verwenden Sie die Umgebungsvariable, oder rufen Sie UseSetting
auf, um diesen Wert festzulegen:
webBuilder.UseSetting(WebHostDefaults.PreventHostingStartupKey, "true");
StartupAssembly
Die Assembly, die nach der Startup
-Klasse suchen soll.
Schlüssel: startupAssembly
Typ:string
Standard: Die Assembly der App
Umgebungsvariable: {PREFIX_}STARTUPASSEMBLY
Verwenden Sie die Umgebungsvariable, oder rufen Sie UseStartup
auf, um diesen Wert festzulegen. UseStartup
kann einen Assemblynamen (string
) oder einen Typ (TStartup
) annehmen. Wenn mehrere UseStartup
-Methoden aufgerufen werden, hat die letzte Vorrang.
webBuilder.UseStartup("StartupAssemblyName");
webBuilder.UseStartup<Startup>();
SuppressStatusMessages
Wenn diese Option aktiviert ist, werden Statusmeldungen zum Hostingstart unterdrückt.
Schlüssel: suppressStatusMessages
Typ: bool
(true
/1
oder false
/0
)
Standard: false
Umgebungsvariable: {PREFIX_}SUPPRESSSTATUSMESSAGES
Verwenden Sie die Konfiguration, oder rufen Sie UseSetting
auf, um diesen Wert festzulegen:
webBuilder.UseSetting(WebHostDefaults.SuppressStatusMessagesKey, "true");
URLs
Eine durch Semikolons getrennte Liste mit IP-Adressen oder Hostadressen mit Ports und Protokollen, denen der Server für Anforderungen lauschen soll. Beispielsweise http://localhost:123
. Verwenden Sie „*“, um anzugeben, dass der Server mithilfe des angegebenen Ports und Protokolls (z. B. http://*:5000
) den Anfragen aller IP-Adressen oder Hostnamen lauschen soll. Das Protokoll (http://
oder https://
) muss in jeder URL enthalten sein. Die unterstützten Formate variieren bei den verschiedenen Servern.
Schlüssel: urls
Typ:string
Standard: http://localhost:5000
und https://localhost:5001
Umgebungsvariable: {PREFIX_}URLS
Verwenden Sie die Umgebungsvariable, oder rufen Sie UseUrls
auf, um diesen Wert festzulegen:
webBuilder.UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002");
Kestrel verfügt über eine eigene API für die Endpunktkonfiguration. Weitere Informationen finden Sie unter Konfigurieren von Endpunkten für den Kestrel-Webserver von ASP.NET Core.
WebRoot
Die IWebHostEnvironment.WebRootPath--Eigenschaft bestimmt den relativen Pfad zu den statischen Objekten der App. Wenn der Pfad nicht vorhanden ist, wird ein Dateianbieter ohne Funktion verwendet.
Schlüssel: webroot
Typ:string
Standard: Der Standardwert ist wwwroot
. Der Pfad zu {Inhaltsstammverzeichnis}/wwwroot muss vorhanden sein.
Umgebungsvariable: {PREFIX_}WEBROOT
Verwenden Sie die Umgebungsvariable, oder rufen Sie UseWebRoot
für IWebHostBuilder
auf, um diesen Wert festzulegen:
webBuilder.UseWebRoot("public");
Weitere Informationen finden Sie unter:
Verwalten der Lebensdauer des Hosts
Rufen Sie Methoden für die erstellte IHost-Implementierung auf, um die App zu starten und zu beenden. Diese Methoden wirken sich auf alle IHostedService-Implementierungen aus, die im Dienstcontainer registriert sind.
Der Unterschied zwischen Run*
- und Start*
-Methoden besteht darin, dass Run*
Methoden warten, bis der Host abgeschlossen ist, bevor er zurückgegeben wird, während Start*
-Methoden sofort zurückgegeben werden. Die Run*
-Methoden werden in der Regel in Konsolen-Apps verwendet, während die Start*
-Methoden in der Regel in lang ausgeführten Diensten verwendet werden.
Ausführen
Durch Run wird die App gestartet und der aufrufende Thread blockiert, bis der Host heruntergefahren wird.
RunAsync
Durch RunAsync wird die App ausgeführt und eine Task-Methode ausgegeben, die abgeschlossen wird, wenn das Abbruchtoken oder das Herunterfahren ausgelöst wird.
RunConsoleAsync
RunConsoleAsync aktiviert die Unterstützung der Konsole, erstellt und startet den Host und lauscht auf STRG+C/SIGINT (Windows), ⌘+C (macOS) oder SIGTERM, um das Herunterfahren auszulösen.
Start
Start startet den Host synchron.
StartAsync
Durch StartAsync wird der Host gestartet und eine Task-Methode ausgegeben, die abgeschlossen wird, wenn das Abbruchtoken oder das Herunterfahren ausgelöst wird.
WaitForStartAsync wird am Anfang der StartAsync
-Methode aufgerufen, die den Vorgang erst fortsetzt, wenn sie abgeschlossen ist. Diese Methode kann verwendet werden, um den Start zu verzögern, bis dieser durch ein externes Ereignis eingeleitet wird.
StopAsync
StopAsync versucht, den Host innerhalb des angegebenen Timeouts zu beenden.
WaitForShutdown
WaitForShutdown blockiert den aufrufenden Thread, bis das Herunterfahren durch IHostLifetime, z. B. über STRG+C/SIGINT (Windows), ⌘+C (macOS) oder SIGTERM, ausgelöst wird.
WaitForShutdownAsync
WaitForShutdownAsync gibt eine Task-Methode zurück, die abgeschlossen wird, wenn das Herunterfahren über das angegebene Token ausgelöst wird, und ruft StopAsync auf.
Externe Steuerung
Die Lebensdauer des Hosts kann mithilfe von Methoden, die extern aufgerufen werden können, direkt gesteuert werden:
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));
}
}
}
Die ASP.NET Core-Vorlagen erstellen einen generischen .NET Core-Host (HostBuilder).
Dieser Artikel stellt Informationen zur Verwendung des generischen .NET-Hosts in ASP.NET Core bereit. Informationen zur Verwendung des generischen .NET-Hosts in Konsolen-Apps finden Sie unter Generischer .NET-Host.
Hostdefinition
Der Host ist ein Objekt, das alle Ressourcen der App kapselt, z. B.:
- Abhängigkeitsinjektion
- Protokollierung
- Konfiguration
IHostedService
-Implementierungen
Beim Starten eines Hosts wird IHostedService.StartAsync für jede Implementierung von IHostedService aufgerufen, die in der Sammlung gehosteter Dienste des Dienstcontainers registriert ist. In einer Web-App ist eine der IHostedService
-Implementierungen ein Webdienst, der eine IHostedService
startet.
Der wichtigste Grund für das Einschließen aller unabhängigen Ressourcen der App in einem Objekt ist die Verwaltung der Lebensdauer: steuern von Start und ordnungsgemäßem Herunterfahren der App.
Einrichten eines Hosts
Der Host wird in der Regel per Code in der Program
-Klasse konfiguriert, erstellt und ausgeführt. Die Main
-Methode:
- Ruft eine
CreateHostBuilder
-Methode zum Erstellen und Konfigurieren eines Generatorobjekts auf. - Ruft
Build
- undRun
-Methoden für das Generatorobjekt auf.
Die ASP.NET Core-Webvorlagen generieren den folgenden Code zum Erstellen eines generischen Hosts:
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>();
});
}
Der folgende Code erstellt einen generischen Host mithilfe einer Nicht-HTTP-Workload. Die IHostedService
-Implementierung wird dem DI-Container hinzugefügt:
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 einen HTTP-Workload ist die Main
-Methode die gleiche, CreateHostBuilder
ruft jedoch ConfigureWebHostDefaults
auf:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Der voranstehende Code wird von den ASP.NET Core-Vorlagen generiert.
Ändern Sie nicht den Namen bzw. die Signatur der CreateHostBuilder
-Methode, wenn die App Entity Framework Core verwendet. Die Entity Framework Core-Tools erwarten eine CreateHostBuilder
-Methode, die den Host konfiguriert, ohne die App auszuführen. Weitere Informationen finden Sie unter DbContext-Instanzerstellung zur Entwurfszeit.
Standardeinstellungen für den Generator
Die CreateDefaultBuilder-Methode:
- Legt das Inhaltsstammverzeichnis auf den Pfad fest, der von GetCurrentDirectory zurückgegeben wird.
- Lädt Hostkonfiguration aus:
- Umgebungsvariablen mit dem Präfix
DOTNET_
. - Befehlszeilenargumenten
- Umgebungsvariablen mit dem Präfix
- Lädt App-Konfiguration aus:
appsettings.json
.appsettings.{Environment}.json
.- Vertraulichen Benutzerdaten, wenn die App in der
Development
-Umgebung ausgeführt wird - Umgebungsvariablen.
- Befehlszeilenargumenten
- Fügt die folgenden Protokollierungsanbieter hinzu:
- Konsole
- Debuggen
- EventSource
- EventLog (nur bei Ausführung unter Windows)
- Aktiviert Bereichsvalidierung und Abhängigkeitsüberprüfung, wenn es sich um eine Entwicklungsumgebung handelt.
Die ConfigureWebHostDefaults
-Methode:
- Lädt Hostkonfiguration aus Umgebungsvariablen mit dem Präfix
ASPNETCORE_
. - Legt den Kestrel-Server als Webserver fest und konfiguriert ihn mithilfe der Hostkonfigurationsanbieter der App. Die Standardoptionen des Kestrel-Servers finden Sie unter Kestrel-Webserver in ASP.NET Core.
- Fügt Middleware zum Filtern von Hosts hinzu.
- Fügt Middleware für weitergeleitete Header hinzu, wenn
ASPNETCORE_FORWARDEDHEADERS_ENABLED
den Werttrue
aufweist. - Ermöglicht die Integration von IIS. Informationen zu den IIS-Standardoptionen finden Sie unter Hosten von ASP.NET Core unter Windows mit IIS.
In den Abschnitten Einstellungen für alle App-Typen und Einstellungen für Web-Apps weiter unten in diesem Artikel wird beschrieben, wie die Standardeinstellungen des Generators außer Kraft gesetzt werden.
Von Frameworks bereitgestellte Dienste
Die folgenden Dienste werden automatisch registriert:
Weitere Informationen zu vom Framework bereitgestellten Diensten finden Sie unter Abhängigkeitsinjektion in ASP.NET Core.
IHostApplicationLifetime
Fügt den IHostApplicationLifetime-Dienst (vorher IApplicationLifetime
-Dienst) in eine beliebige Klasse ein, um die Aktivitäten nach dem Starten und die Aufgaben für ordnungsgemäßes Herunterfahren zu verarbeiten. Bei drei der Eigenschaften der Schnittstelle handelt es sich um Abbruchtokens, die zum Registrieren von Ereignishandlermethoden zum Starten und Beenden von Apps verwendet werden. Die Benutzeroberfläche umfasst auch eine StopApplication
-Methode.
Das folgende Beispiel zeigt eine IHostedService
-Implementierung, die IHostApplicationLifetime
-Ereignisse registriert:
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
Die IHostLifetime-Implementierung steuert, wann der Host gestartet und beendet wird. Die zuletzt registrierte Implementierung wird verwendet.
Microsoft.Extensions.Hosting.Internal.ConsoleLifetime
ist die IHostLifetime
-Standardimplementierung. ConsoleLifetime
:
- Lauscht auf STRG+C/SIGINT (Windows), ⌘+C (macOS) oder SIGTERM und ruft StopApplication auf, um den Vorgang zum Herunterfahren einzuleiten.
- Hebt die Blockierung von Erweiterungen wie RunAsync und WaitForShutdownAsync auf.
IHostEnvironment
Fügt den IHostEnvironment-Dienst in eine Klasse ein, um Informationen über die folgenden Einstellungen abzurufen:
Web-Apps implementieren die IWebHostEnvironment
-Schnittstelle, die IHostEnvironment
erbt und IWebHostEnvironment
hinzufügt.
Konfiguration des Hosts
Die Hostkonfiguration wird für die Eigenschaften der IHostEnvironment-Implementierung verwendet.
Die Hostkonfiguration ist über HostBuilderContext.Configuration in ConfigureAppConfiguration verfügbar. Nach ConfigureAppConfiguration
wird HostBuilderContext.Configuration
durch die App-Konfiguration ersetzt.
Rufen Sie ConfigureHostConfiguration für IHostBuilder
auf, um die Hostkonfiguration hinzuzufügen. ConfigureHostConfiguration
kann mehrfach mit additiven Ergebnissen aufgerufen werden. Der Host verwendet die Option, die zuletzt einen Wert für einen bestimmten Schlüssel festlegt.
Der Umgebungsvariablenanbieter mit dem Präfix DOTNET_
und die Befehlszeilenargumente sind in CreateDefaultBuilder
enthalten. Für Web-Apps wird der Umgebungsvariablenanbieter mit dem Präfix ASPNETCORE_
hinzugefügt. Das Präfix wird entfernt, wenn die Umgebungsvariablen gelesen werden. Der Wert der Umgebungsvariable für ASPNETCORE_ENVIRONMENT
wird z. B. der Hostkonfigurationswert für den environment
-Schlüssel.
Im folgenden Beispiel wird eine Hostkonfiguration erstellt:
// 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);
});
App-Konfiguration
Die App-Konfiguration wird durch Aufrufen von ConfigureAppConfiguration für IHostBuilder
erstellt. ConfigureAppConfiguration
kann mehrfach mit additiven Ergebnissen aufgerufen werden. Die App verwendet die Option, die zuletzt einen Wert für einen bestimmten Schlüssel festlegt.
Die von ConfigureAppConfiguration
erstellte Konfiguration steht für nachfolgende Vorgänge unter HostBuilderContext.Configuration und als Dienst über DI zur Verfügung. Die Hostkonfiguration wird ebenfalls der App-Konfiguration hinzugefügt.
Weitere Informationen finden Sie unter Konfiguration in ASP.NET Core.
Einstellungen für alle App-Typen
In diesem Abschnitt werden Hosteinstellungen aufgeführt, die sowohl für HTTP- als auch für Nicht-HTTP-Workloads gelten. Standardmäßig können die zum Konfigurieren dieser Einstellungen verwendeten Umgebungsvariablen ein DOTNET_
- oder ASPNETCORE_
-Präfix aufweisen, das in der folgenden Konfiguration für den Platzhalter {PREFIX_}
angezeigt wird.
ApplicationName
Die Eigenschaft IHostEnvironment.ApplicationName wird über die Hostkonfiguration während der Hosterstellung festgelegt.
Schlüssel: applicationName
Typ:string
Standard: Der Name der Assembly, die den Einstiegspunkt der App enthält.
Umgebungsvariable: {PREFIX_}APPLICATIONNAME
Verwenden Sie die Umgebungsvariable, um diesen Wert festzulegen.
ContentRoot
Die Eigenschaft IHostEnvironment.ContentRootPath bestimmt, wo der Host mit der Suche nach Inhaltsdateien beginnt. Wenn der Pfad nicht vorhanden ist, kann der Host nicht gestartet werden.
Schlüssel: contentRoot
Typ:string
Standard: Der Ordner, in dem die App-Assembly gespeichert ist.
Umgebungsvariable: {PREFIX_}CONTENTROOT
Verwenden Sie die Umgebungsvariable, oder rufen Sie UseContentRoot
für IHostBuilder
auf, um diesen Wert festzulegen:
Host.CreateDefaultBuilder(args)
.UseContentRoot("c:\\content-root")
//...
Weitere Informationen finden Sie unter:
EnvironmentName
Die Eigenschaft IHostEnvironment.EnvironmentName kann auf einen beliebigen Wert festgelegt werden. Zu den durch Frameworks definierten Werten zählen Development
, Staging
und Production
. Die Groß-/Kleinschreibung wird bei Werten nicht beachtet.
Schlüssel: environment
Typ:string
Standard: Production
Umgebungsvariable: {PREFIX_}ENVIRONMENT
Verwenden Sie die Umgebungsvariable, oder rufen Sie UseEnvironment
für IHostBuilder
auf, um diesen Wert festzulegen:
Host.CreateDefaultBuilder(args)
.UseEnvironment("Development")
//...
ShutdownTimeout
HostOptions.ShutdownTimeout legt den Timeout für StopAsync fest. Der Standardwert beträgt fünf Sekunden. Während des Zeitlimits verhält sich der Host folgendermaßen:
- Er löst IHostApplicationLifetime.ApplicationStopping aus.
- Er versucht, gehostete Dienste zu beenden und protokolliert Fehler für Dienste, die nicht beendet werden können.
Wenn das Zeitlimit abläuft bevor alle gehosteten Dienste beendet sind, werden alle verbleibenden aktiven Dienste beendet, wenn die App herunterfährt. Die Dienste werden beendet, selbst wenn die Verarbeitung noch nicht abgeschlossen ist. Wenn die Dienste mehr Zeit zum Beenden benötigen, erhöhen Sie den Timeoutwert.
Schlüssel: shutdownTimeoutSeconds
Typ:int
Standard: 5 Sekunden
Umgebungsvariable: {PREFIX_}SHUTDOWNTIMEOUTSECONDS
Verwenden Sie die Umgebungsvariable, oder konfigurieren Sie HostOptions
, um diesen Wert festzulegen. Im folgenden Beispiel wird das Zeitlimit auf 20 Sekunden festgelegt:
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.Configure<HostOptions>(option =>
{
option.ShutdownTimeout = System.TimeSpan.FromSeconds(20);
});
});
Einstellungen für Web-Apps
Einige Hosteinstellungen gelten nur für HTTP-Workloads. Standardmäßig können Umgebungsvariablen, die zur Konfiguration dieser Einstellungen verwendet werden, ein DOTNET_
- oder ASPNETCORE_
-Präfix haben.
Für diese Einstellungen sind Erweiterungsmethoden in IWebHostBuilder
verfügbar. In den Codebeispielen, die zeigen, wie Sie die Erweiterungsmethoden aufrufen können, wird davon ausgegangen, dass webBuilder
eine Instanz von IWebHostBuilder
ist. Sehen Sie hierzu das folgende Beispiel:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.CaptureStartupErrors(true);
webBuilder.UseStartup<Startup>();
});
CaptureStartupErrors
Wenn diese false
ist, führen Fehler beim Start zum Beenden des Hosts. Wenn diese true
ist, erfasst der Host Ausnahmen während des Starts und versucht, den Server zu starten.
Schlüssel: captureStartupErrors
Typ: bool
(true
/1
oder false
/0
)
Standard: Die Standardeinstellung ist false
, wenn die App nicht mit Kestrel im Hintergrund von IIS ausgeführt wird, dann ist diese true
.
Umgebungsvariable: {PREFIX_}CAPTURESTARTUPERRORS
Verwenden Sie die Konfiguration, oder rufen Sie CaptureStartupErrors
auf, um diesen Wert festzulegen:
webBuilder.CaptureStartupErrors(true);
DetailedErrors
Wenn diese Einstellung aktiviert ist oder die Umgebung auf Development
festgelegt ist, erfasst die App detaillierte Fehler.
Schlüssel: detailedErrors
Typ: bool
(true
/1
oder false
/0
)
Standard: false
Umgebungsvariable: {PREFIX_}DETAILEDERRORS
Verwenden Sie die Konfiguration, oder rufen Sie UseSetting
auf, um diesen Wert festzulegen:
webBuilder.UseSetting(WebHostDefaults.DetailedErrorsKey, "true");
HostingStartupAssemblies
Eine durch Semikolons getrennte Zeichenfolge der Hostingstartassemblys, die beim Start geladen werden soll. Obwohl der Konfigurationswert standardmäßig auf eine leere Zeichenfolge festgelegt ist, enthalten die Hostingstartassemblys immer die Assembly der App. Wenn Hostingstartassemblys bereitgestellt werden, werden diese zur Assembly der App hinzugefügt, damit diese geladen werden, wenn die App während des Starts die allgemeinen Dienste erstellt.
Schlüssel: hostingStartupAssemblies
Typ:string
Standard: Leere Zeichenfolge
Umgebungsvariable: {PREFIX_}HOSTINGSTARTUPASSEMBLIES
Verwenden Sie die Konfiguration, oder rufen Sie UseSetting
auf, um diesen Wert festzulegen:
webBuilder.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "assembly1;assembly2");
HostingStartupExcludeAssemblies
Eine durch Semikolons getrennte Zeichenfolge der Hostingstartassemblys, die beim Start ausgeschlossen werden sollen.
Schlüssel: hostingStartupExcludeAssemblies
Typ:string
Standard: Leere Zeichenfolge
Umgebungsvariable: {PREFIX_}HOSTINGSTARTUPEXCLUDEASSEMBLIES
Verwenden Sie die Konfiguration, oder rufen Sie UseSetting
auf, um diesen Wert festzulegen:
webBuilder.UseSetting(WebHostDefaults.HostingStartupExcludeAssembliesKey, "assembly1;assembly2");
HTTPS_Port
Der HTTPS-Umleitungsport. Wird in Erzwingen von HTTPS verwendet.
Schlüssel: https_port
Typ:string
Standard: Es ist kein Standardwert festgelegt.
Umgebungsvariable: {PREFIX_}HTTPS_PORT
Verwenden Sie die Konfiguration, oder rufen Sie UseSetting
auf, um diesen Wert festzulegen:
webBuilder.UseSetting("https_port", "8080");
PreferHostingUrls
Gibt an, ob der Host auf die URLs lauschen soll, die mit IWebHostBuilder
konfiguriert wurden, anstatt auf die URLs zu lauschen, die mit der IServer
-Implementierung konfiguriert wurden.
Schlüssel: preferHostingUrls
Typ: bool
(true
/1
oder false
/0
)
Standard: false
Umgebungsvariable: {PREFIX_}PREFERHOSTINGURLS
Verwenden Sie die Umgebungsvariable, oder rufen Sie PreferHostingUrls
auf, um diesen Wert festzulegen:
webBuilder.PreferHostingUrls(true);
PreventHostingStartup
Verhindert das automatische Laden der Hostingstartassemblys, einschließlich denen, die von der Assembly der App konfiguriert wurden. Weitere Informationen finden Sie unter Verwenden von Hostingstartassemblys in ASP.NET Core.
Schlüssel: preventHostingStartup
Typ: bool
(true
/1
oder false
/0
)
Standard: false
Umgebungsvariable: {PREFIX_}PREVENTHOSTINGSTARTUP
Verwenden Sie die Umgebungsvariable, oder rufen Sie UseSetting
auf, um diesen Wert festzulegen:
webBuilder.UseSetting(WebHostDefaults.PreventHostingStartupKey, "true");
StartupAssembly
Die Assembly, die nach der Startup
-Klasse suchen soll.
Schlüssel: startupAssembly
Typ:string
Standard: Die Assembly der App
Umgebungsvariable: {PREFIX_}STARTUPASSEMBLY
Verwenden Sie die Umgebungsvariable, oder rufen Sie UseStartup
auf, um diesen Wert festzulegen. UseStartup
kann einen Assemblynamen (string
) oder einen Typ (TStartup
) annehmen. Wenn mehrere UseStartup
-Methoden aufgerufen werden, hat die letzte Vorrang.
webBuilder.UseStartup("StartupAssemblyName");
webBuilder.UseStartup<Startup>();
SuppressStatusMessages
Wenn diese Option aktiviert ist, werden Statusmeldungen zum Hostingstart unterdrückt.
Schlüssel: suppressStatusMessages
Typ: bool
(true
/1
oder false
/0
)
Standard: false
Umgebungsvariable: {PREFIX_}SUPPRESSSTATUSMESSAGES
Verwenden Sie die Konfiguration, oder rufen Sie UseSetting
auf, um diesen Wert festzulegen:
webBuilder.UseSetting(WebHostDefaults.SuppressStatusMessagesKey, "true");
URLs
Eine durch Semikolons getrennte Liste mit IP-Adressen oder Hostadressen mit Ports und Protokollen, denen der Server für Anforderungen lauschen soll. Beispielsweise http://localhost:123
. Verwenden Sie „*“, um anzugeben, dass der Server mithilfe des angegebenen Ports und Protokolls (z. B. http://*:5000
) den Anfragen aller IP-Adressen oder Hostnamen lauschen soll. Das Protokoll (http://
oder https://
) muss in jeder URL enthalten sein. Die unterstützten Formate variieren bei den verschiedenen Servern.
Schlüssel: urls
Typ:string
Standard: http://localhost:5000
und https://localhost:5001
Umgebungsvariable: {PREFIX_}URLS
Verwenden Sie die Umgebungsvariable, oder rufen Sie UseUrls
auf, um diesen Wert festzulegen:
webBuilder.UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002");
Kestrel verfügt über eine eigene API für die Endpunktkonfiguration. Weitere Informationen finden Sie unter Kestrel-Webserver in ASP.NET Core.
WebRoot
Die IWebHostEnvironment.WebRootPath--Eigenschaft bestimmt den relativen Pfad zu den statischen Objekten der App. Wenn der Pfad nicht vorhanden ist, wird ein Dateianbieter ohne Funktion verwendet.
Schlüssel: webroot
Typ:string
Standard: Der Standardwert ist wwwroot
. Der Pfad zu {Inhaltsstammverzeichnis}/wwwroot muss vorhanden sein.
Umgebungsvariable: {PREFIX_}WEBROOT
Verwenden Sie die Umgebungsvariable, oder rufen Sie UseWebRoot
für IWebHostBuilder
auf, um diesen Wert festzulegen:
webBuilder.UseWebRoot("public");
Weitere Informationen finden Sie unter:
Verwalten der Lebensdauer des Hosts
Rufen Sie Methoden für die erstellte IHost-Implementierung auf, um die App zu starten und zu beenden. Diese Methoden wirken sich auf alle IHostedService-Implementierungen aus, die im Dienstcontainer registriert sind.
Der Unterschied zwischen Run*
- und Start*
-Methoden besteht darin, dass Run*
Methoden warten, bis der Host abgeschlossen ist, bevor er zurückgegeben wird, während Start*
-Methoden sofort zurückgegeben werden. Die Run*
-Methoden werden in der Regel in Konsolen-Apps verwendet, während die Start*
-Methoden in der Regel in lang ausgeführten Diensten verwendet werden.
Ausführen
Durch Run wird die App gestartet und der aufrufende Thread blockiert, bis der Host heruntergefahren wird.
RunAsync
Durch RunAsync wird die App ausgeführt und eine Task-Methode ausgegeben, die abgeschlossen wird, wenn das Abbruchtoken oder das Herunterfahren ausgelöst wird.
RunConsoleAsync
RunConsoleAsync aktiviert die Unterstützung der Konsole, erstellt und startet den Host und lauscht auf STRG+C/SIGINT (Windows), ⌘+C (macOS) oder SIGTERM, um das Herunterfahren auszulösen.
Start
Start startet den Host synchron.
StartAsync
Durch StartAsync wird der Host gestartet und eine Task-Methode ausgegeben, die abgeschlossen wird, wenn das Abbruchtoken oder das Herunterfahren ausgelöst wird.
WaitForStartAsync wird am Anfang der StartAsync
-Methode aufgerufen, die den Vorgang erst fortsetzt, wenn sie abgeschlossen ist. Diese Methode kann verwendet werden, um den Start zu verzögern, bis dieser durch ein externes Ereignis eingeleitet wird.
StopAsync
StopAsync versucht, den Host innerhalb des angegebenen Timeouts zu beenden.
WaitForShutdown
WaitForShutdown blockiert den aufrufenden Thread, bis das Herunterfahren durch IHostLifetime, z. B. über STRG+C/SIGINT (Windows), ⌘+C (macOS) oder SIGTERM, ausgelöst wird.
WaitForShutdownAsync
WaitForShutdownAsync gibt eine Task-Methode zurück, die abgeschlossen wird, wenn das Herunterfahren über das angegebene Token ausgelöst wird, und ruft StopAsync auf.
Externe Steuerung
Die Lebensdauer des Hosts kann mithilfe von Methoden, die extern aufgerufen werden können, direkt gesteuert werden:
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));
}
}
}
Zusätzliche Ressourcen
- Hintergrundtasks mit gehosteten Diensten in ASP.NET Core
- GitHub-Link zu Generischer Hostquelle
Hinweis
Dokumentationslinks zur .NET-Referenzquelle laden in der Regel den Standardbranch des Repositorys, der die aktuelle Entwicklung für das nächste Release von .NET darstellt. Um ein Tag für ein bestimmtes Release auszuwählen, wählen Sie diesen mit der Dropdownliste Switch branches or tags (Branches oder Tags wechseln) aus. Weitere Informationen finden Sie unter How to select a version tag of ASP.NET Core source code (dotnet/AspNetCore.Docs #26205) (Auswählen eines Versionstags von ASP.NET Core-Quellcode (dotnet/AspNetCore.Docs #26205)).