ASP.NET Core – GrundlagenASP.NET Core fundamentals

In diesem Artikel finden Sie eine Übersicht über die wichtigsten Themen zum Entwickeln von ASP.NET Core-Apps.This article provides an overview of key topics for understanding how to develop ASP.NET Core apps.

Die Startup-KlasseThe Startup class

In der Startup-Klasse:The Startup class is where:

  • werden die von der App erforderlichen Dienste konfiguriert.Services required by the app are configured.
  • Die Anforderungsverarbeitungspipeline der App wird mit mehreren Middlewarekomponenten definiert.The app's request handling pipeline is defined, as a series of middleware components.

Beispiel für eine Startup-Klasse:Here's a sample Startup class:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<RazorPagesMovieContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));

        services.AddControllersWithViews();
        services.AddRazorPages();
    }

    public void Configure(IApplicationBuilder app)
    {
        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapDefaultControllerRoute();
            endpoints.MapRazorPages();
        });
    }
}

Weitere Informationen finden Sie unter Anwendungsstart in ASP.NET Core.For more information, see Anwendungsstart in ASP.NET Core.

Abhängigkeitsinjektion (Dienste)Dependency injection (services)

ASP.NET Core umfasst ein integriertes DI-Framework (Dependency Injection), durch das konfigurierte Dienste in einer App bereitgestellt werden.ASP.NET Core includes a built-in dependency injection (DI) framework that makes configured services available throughout an app. Eine Protokollierungskomponente stellt beispielsweise einen Dienst dar.For example, a logging component is a service.

wird Code, der Dienste konfiguriert (oder registriert) der Startup.ConfigureServices-Methode hinzugefügt.Code to configure (or register) services is added to the Startup.ConfigureServices method. Zum Beispiel:For example:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<RazorPagesMovieContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));

    services.AddControllersWithViews();
    services.AddRazorPages();
}

Dienste werden üblicherweise mit einer Constructor Injection aus der DI aufgelöst.Services are typically resolved from DI using constructor injection. Bei der Constructor Injection deklariert eine Klasse einen Konstruktorparameter des erforderlichen Typs oder einer Schnittstelle.With constructor injection, a class declares a constructor parameter of either the required type or an interface. Das DI-Framework stellt zur Laufzeit eine Instanz dieses Diensts bereit.The DI framework provides an instance of this service at runtime.

Im folgenden Beispiel wird die Constructor Injection verwendet, um RazorPagesMovieContext aus der DI zu lösen:The following example uses constructor injection to resolve a RazorPagesMovieContext from DI:

public class IndexModel : PageModel
{
    private readonly RazorPagesMovieContext _context;

    public IndexModel(RazorPagesMovieContext context)
    {
        _context = context;
    }

    // ...

    public async Task OnGetAsync()
    {
        Movies = await _context.Movies.ToListAsync();
    }
}

Wenn der integrierte IoC-Container (Inversion of Control, Steuerungsumkehr) nicht alle Anforderungen einer App erfüllt, kann stattdessen ein IoC-Drittanbietercontainer verwendet werden.If the built-in Inversion of Control (IoC) container doesn't meet all of an app's needs, a third-party IoC container can be used instead.

Weitere Informationen finden Sie unter Dependency Injection in ASP.NET Core.For more information, see Dependency Injection in ASP.NET Core.

MiddlewareMiddleware

Die Pipeline zur Anforderungsverarbeitung besteht aus mehreren Middlewarekomponenten.The request handling pipeline is composed as a series of middleware components. Jede Komponente führt Vorgänge in einem HttpContext aus und ruft anschließend entweder die nächste Middleware in der Pipeline auf oder beendet die Anforderung.Each component performs operations on an HttpContext and either invokes the next middleware in the pipeline or terminates the request.

Gemäß Konvention wird eine Middlewarekomponente der Pipeline durch Aufrufen einer Use...-Erweiterungsmethode in der Startup.Configure-Methode hinzugefügt.By convention, a middleware component is added to the pipeline by invoking a Use... extension method in the Startup.Configure method. Um beispielsweise das Rendering statischer Dateien zu aktivieren, rufen Sie UseStaticFiles auf.For example, to enable rendering of static files, call UseStaticFiles.

Im folgenden Beispiel wird einer Anforderungsverarbeitungspipeline konfiguriert:The following example configures a request handling pipeline:

public void Configure(IApplicationBuilder app)
{
    app.UseHttpsRedirection();
    app.UseStaticFiles();

    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapDefaultControllerRoute();
        endpoints.MapRazorPages();
    });
}

ASP.NET Core enthält zahlreiche integrierte Middlewareanwendungen.ASP.NET Core includes a rich set of built-in middleware. Es können auch benutzerdefinierte Middlewarekomponenten geschrieben werden.Custom middleware components can also be written.

Weitere Informationen finden Sie unter ASP.NET Core-Middleware.For more information, see ASP.NET Core-Middleware.

HostHost

Beim Starten erstellt eine ASP.NET Core-App einen Host.On startup, an ASP.NET Core app builds a host. Der Host kapselt alle Ressourcen der App, zum Beispiel:The host encapsulates all of the app's resources, such as:

  • eine HTTP-ServerimplementierungAn HTTP server implementation
  • MiddlewarekomponentenMiddleware components
  • ProtokollierungLogging
  • DI-DiensteDependency injection (DI) services
  • KonfigurationConfiguration

Es gibt zwei verschiedene Hosts:There are two different hosts:

  • Generischer .NET-Host.NET Generic Host
  • ASP.NET Core-WebhostASP.NET Core Web Host

Der generische .NET-Host wird empfohlen.The .NET Generic Host is recommended. Der ASP.NET Core-Webhost wird lediglich für die Abwärtskompatibilität zur Verfügung gestellt.The ASP.NET Core Web Host is available only for backwards compatibility.

Im folgenden Beispiel wird ein neuer generischer .NET-Host erstellt:The following example creates a .NET Generic Host:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

Mit den Methoden CreateDefaultBuilder und ConfigureWebHostDefaults wird ein Host mit mehreren Standardoptionen konfiguriert, zum Beispiel:The CreateDefaultBuilder and ConfigureWebHostDefaults methods configure a host with a set of default options, such as:

  • Verwenden von Kestrel als Webserver, und aktivieren der Integration von Internetinformationsdiensten.Use Kestrel as the web server and enable IIS integration.
  • Laden der Konfiguration aus appsettings.json, appsettings.[EnvironmentName].json, Umgebungsvariablen, Befehlszeilenargumenten und anderen Konfigurationsquellen.Load configuration from appsettings.json, appsettings.{Environment Name}.json, environment variables, command line arguments, and other configuration sources.
  • Senden von Protokollausgaben an die Konsole und Debuggen von Anbietern.Send logging output to the console and debug providers.

Weitere Informationen finden Sie unter Generischer .NET-Host.For more information, see Generischer .NET-Host.

Nicht webbasierte SzenariosNon-web scenarios

Mit dem generischen Host können andere App-Typen querschnittliche Frameworkerweiterungen wie Protokollierung, Dependency Injection (DI), Konfiguration und Lebensdauerverwaltung der App verwenden.The Generic Host allows other types of apps to use cross-cutting framework extensions, such as logging, dependency injection (DI), configuration, and app lifetime management. Weitere Informationen finden Sie unter Generischer .NET-Host und Hintergrundtasks mit gehosteten Diensten in ASP.NET Core.For more information, see Generischer .NET-Host and Hintergrundtasks mit gehosteten Diensten in ASP.NET Core.

ServerServers

Eine ASP.NET Core-App verwendet eine HTTP-Serverimplementierung zum Lauschen auf HTTP-Anforderungen.An ASP.NET Core app uses an HTTP server implementation to listen for HTTP requests. Der Server sendet Anforderungen an die App in Form von mehreren Anforderungsfunktionen in einem HttpContext.The server surfaces requests to the app as a set of request features composed into an HttpContext.

Die folgenden Serverimplementierungen werden von ASP.NET Core bereitgestellt:ASP.NET Core provides the following server implementations:

  • Kestrel ist ein plattformübergreifender Webserver.Kestrel is a cross-platform web server. Kestrel wird häufig in einer Reverseproxykonfiguration unter Verwendung von IIS ausgeführt.Kestrel is often run in a reverse proxy configuration using IIS. In ASP.NET Core 2.0 oder höher kann Kestrel als öffentlich zugänglicher Edge-Server ausgeführt werden, der direkt mit dem Internet verknüpft ist.In ASP.NET Core 2.0 or later, Kestrel can be run as a public-facing edge server exposed directly to the Internet.
  • Der IIS-HTTP-Server ist ein Server für Windows, der IIS verwendet.IIS HTTP Server is a server for Windows that uses IIS. Mit diesem Server werden die ASP.NET Core-App und IIS im gleichen Prozess ausgeführt.With this server, the ASP.NET Core app and IIS run in the same process.
  • HTTP.sys ist ein Server für Windows, der nicht mit IIS verwendet wird.HTTP.sys is a server for Windows that isn't used with IIS.

Weitere Informationen finden Sie unter Webserverimplementierungen in ASP.NET Core.For more information, see Webserverimplementierungen in ASP.NET Core.

KonfigurationConfiguration

ASP.NET Core bietet ein Konfigurationsframework, das Einstellungen als Name/Wert-Paare aus einer geordneten Menge von Konfigurationsanbietern abruft.ASP.NET Core provides a configuration framework that gets settings as name-value pairs from an ordered set of configuration providers. Integrierte Konfigurationsanbieter stehen für eine Vielzahl von Quellen zur Verfügung, z. B. für JSON-Dateien, XML-Dateien, Umgebungsvariablen und Befehlszeilenargumente.Built-in configuration providers are available for a variety of sources, such as .json files, .xml files, environment variables, and command-line arguments. Schreiben Sie benutzerdefinierte Konfigurationsanbieter, um andere Quellen zu unterstützen.Write custom configuration providers to support other sources.

ASP.NET Core-Apps werden standardmäßig zum Lesen aus appsettings.json, Umgebungsvariablen, der Befehlszeile und mehr konfiguriert.By default, ASP.NET Core apps are configured to read from appsettings.json, environment variables, the command line, and more. Wenn die Konfiguration der App geladen wird, überschreiben Werte aus Umgebungsvariablen die Werte von appsettings.json.When the app's configuration is loaded, values from environment variables override values from appsettings.json.

Die bevorzugte Methode für das Lesen zugehöriger Konfigurationswerte ist die Verwendung des Optionsmusters.The preferred way to read related configuration values is using the options pattern. Weitere Informationen finden Sie unter Binden hierarchischer Konfigurationsdaten mit dem Optionsmuster.For more information, see Bind hierarchical configuration data using the options pattern.

Zum Verwalten vertraulicher Konfigurationsdaten wie Kennwörter bietet ASP.NET Core den Secret Manager.For managing confidential configuration data such as passwords, ASP.NET Core provides the Secret Manager. Für Produktionsgeheimnisse empfehlen wir Azure Key Vault.For production secrets, we recommend Azure Key Vault.

Weitere Informationen finden Sie unter Konfiguration in ASP.NET Core.For more information, see Konfiguration in ASP.NET Core.

UmgebungenEnvironments

Ausführungsumgebungen wie Development, Staging und Production sind in ASP.NET Core von besonderer Bedeutung.Execution environments, such as Development, Staging, and Production, are a first-class notion in ASP.NET Core. Legen Sie die Umgebung fest, in der eine App ausgeführt wird, indem Sie die Umgebungsvariable ASPNETCORE_ENVIRONMENT festlegen.Specify the environment an app is running in by setting the ASPNETCORE_ENVIRONMENT environment variable. ASP.NET Core liest diese Umgebungsvariable beim Start der App und speichert den Wert in einer IWebHostEnvironment-Implementierung.ASP.NET Core reads that environment variable at app startup and stores the value in an IWebHostEnvironment implementation. Diese Implementierung ist per DI überall in einer App verfügbar.This implementation is available anywhere in an app via dependency injection (DI).

Im Folgenden Beispiel wird die App so konfiguriert, dass sie ausführliche Fehlerinformationen angibt, wenn sie in der Development-Umgebung ausgeführt wird:The following example configures the app to provide detailed error information when running in the Development environment:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();

    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapDefaultControllerRoute();
        endpoints.MapRazorPages();
    });
}

Weitere Informationen finden Sie unter Verwenden von mehreren Umgebungen in ASP.NET Core.For more information, see Verwenden von mehreren Umgebungen in ASP.NET Core.

ProtokollierungLogging

ASP.NET Core unterstützt eine Protokollierungs-API, die mit einer Vielzahl von integrierten Protokollierungsanbietern und Drittanbieter-Protokollierungslösungen zusammenarbeitet.ASP.NET Core supports a logging API that works with a variety of built-in and third-party logging providers. Folgende Anbieter sind verfügbar:Available providers include:

  • KonsoleConsole
  • DebugDebug
  • Ereignisablaufverfolgung unter WindowsEvent Tracing on Windows
  • Windows-EreignisprotokollWindows Event Log
  • TraceSourceTraceSource
  • Azure App ServiceAzure App Service
  • Azure Application InsightsAzure Application Insights

Zum Erstellen von Protokollen lösen Sie einen ILogger<TCategoryName>-Dienst aus DI, und rufen Sie Protokollierungsmethoden wie LogInformation auf.To create logs, resolve an ILogger<TCategoryName> service from dependency injection (DI) and call logging methods such as LogInformation. Zum Beispiel:For example:

public class TodoController : ControllerBase
{
    private readonly ILogger _logger;

    public TodoController(ILogger<TodoController> logger)
    {
        _logger = logger;
    }

    [HttpGet("{id}", Name = "GetTodo")]
    public ActionResult<TodoItem> GetById(string id)
    {
        _logger.LogInformation(LoggingEvents.GetItem, "Getting item {Id}", id);
        
        // Item lookup code removed.
        
        if (item == null)
        {
            _logger.LogWarning(LoggingEvents.GetItemNotFound, "GetById({Id}) NOT FOUND", id);
            return NotFound();
        }
        
        return item;
    }
}

Protokollierungsmethoden wie LogInformation unterstützen eine beliebige Anzahl von Feldern.Logging methods such as LogInformation support any number of fields. Diese Felder werden häufig zum Erstellen einer string-Meldung verwendet, einige Protokollierungsanbieter senden sie jedoch als separate Felder an einen Datenspeicher.These fields are commonly used to construct a message string, but some logging providers send these to a data store as separate fields. Dieses Funktion ermöglicht Protokollierungsanbietern das Implementieren von semantischer Protokollierung, auch bezeichnet als strukturierte Protokollierung.This feature makes it possible for logging providers to implement semantic logging, also known as structured logging.

Weitere Informationen finden Sie unter Protokollieren in .NET Core und ASP.NET Core.For more information, see Protokollieren in .NET Core und ASP.NET Core.

RoutingRouting

Eine Route ist ein URL-Muster, das einem Handler zugeordnet ist.A route is a URL pattern that is mapped to a handler. Der Handler ist normalerweise eine Razor-Seite, eine Aktionsmethode in einem MVC-Controller oder einer Middleware.The handler is typically a Razor page, an action method in an MVC controller, or a middleware. Mit ASP.NET Core-Routing können Sie steuern, welche URLs von Ihrer App verwendet werden.ASP.NET Core routing gives you control over the URLs used by your app.

Weitere Informationen finden Sie unter Routing in ASP.NET Core.For more information, see Routing in ASP.NET Core.

FehlerbehandlungError handling

ASP.NET Core verfügt über integrierte Funktionen zur Fehlerbehandlung wie beispielsweise:ASP.NET Core has built-in features for handling errors, such as:

  • eine Seite mit Ausnahmen für EntwicklerA developer exception page
  • benutzerdefinierte FehlerseitenCustom error pages
  • statische StatuscodeseitenStatic status code pages
  • Fehlerbehandlung während des StartsStartup exception handling

Weitere Informationen finden Sie unter Fehlerbehandlung in ASP.NET Core.For more information, see Fehlerbehandlung in ASP.NET Core.

Übermitteln von HTTP-AnforderungenMake HTTP requests

Eine Implementierung von IHttpClientFactory ist verfügbar zum Erstellen von HttpClient-Instanzen.An implementation of IHttpClientFactory is available for creating HttpClient instances. Die Factory:The factory:

  • Ein zentraler Ort für das Benennen und Konfigurieren logischer HttpClient-Instanzen wird damit geboten.Provides a central location for naming and configuring logical HttpClient instances. Registrieren und konfigurieren Sie beispielsweise einen GitHub-Client für den Zugriff auf GitHub.For example, register and configure a github client for accessing GitHub. Registrieren und konfigurieren Sie einen Standardclient für andere Zwecke.Register and configure a default client for other purposes.
  • Unterstützt die Registrierung und Verkettung von mehreren delegierenden Handlern, um eine Pipeline für die Middleware für ausgehende Anforderungen zu erstellen.Supports registration and chaining of multiple delegating handlers to build an outgoing request middleware pipeline. Dieses Muster ähnelt der eingehenden Middlewarepipeline von ASP.NET Core.This pattern is similar to ASP.NET Core's inbound middleware pipeline. Das Muster bietet einen Mechanismus zum Verwalten von übergreifenden Belangen für HTTP-Anforderungen, einschließlich der Zwischenspeicherung, Fehlerbehandlung, Serialisierung und Protokollierung.The pattern provides a mechanism to manage cross-cutting concerns for HTTP requests, including caching, error handling, serialization, and logging.
  • Integrierbar in Polly, eine beliebte Drittanbieter-Bibliothek zur Behandlung vorübergehender Fehler.Integrates with Polly, a popular third-party library for transient fault handling.
  • Das Pooling und die Lebensdauer von zugrunde liegenden HttpClientHandler-Instanzen werden verwaltet, um gängige DNS-Probleme zu vermeiden, die bei der manuellen Verwaltung der HttpClient-Lebensdauer auftreten.Manages the pooling and lifetime of underlying HttpClientHandler instances to avoid common DNS problems that occur when managing HttpClient lifetimes manually.
  • Eine konfigurierbare Protokollierungsfunktion wird über ILogger für alle Anforderungen hinzugefügt, die über Clients gesendet werden, die von der Factory erstellt wurden.Adds a configurable logging experience via ILogger for all requests sent through clients created by the factory.

Weitere Informationen finden Sie unter Stellen von HTTP-Anforderungen mithilfe von IHttpClientFactory in ASP.NET Core.For more information, see Stellen von HTTP-Anforderungen mithilfe von IHttpClientFactory in ASP.NET Core.

InhaltsstammverzeichnisContent root

Der Inhaltsstamm ist der Basispfad für:The content root is the base path for:

  • Die ausführbare Datei, die die App hostet ( .exe).The executable hosting the app (.exe).
  • Kompilierten Assemblys, die die App bilden ( .dll).Compiled assemblies that make up the app (.dll).
  • Inhaltsdateien, die von der App verwendet werden, z. B.:Content files used by the app, such as:
    • Razor-Dateien ( .cshtml, .razor)Razor files (.cshtml, .razor)
    • Konfigurationsdateien ( .json, .xml)Configuration files (.json, .xml)
    • Datendateien ( .db)Data files (.db)
  • Der Webstamm, in der Regel der Ordner wwwrootThe Web root, typically the wwwroot folder.

Während der Entwicklung wird standardmäßig das Stammverzeichnis des Projekts als Inhaltsstamm verwendet.During development, the content root defaults to the project's root directory. Dieses Verzeichnis ist auch der Basispfad für die Inhaltsdateien der App und den Webstamm.This directory is also the base path for both the app's content files and the Web root. Sie können einen anderen Inhaltsstamm festlegen, indem Sie den entsprechenden Pfad beim Erstellen des Hosts festlegen.Specify a different content root by setting its path when building the host. Weitere Informationen finden Sie unter Inhaltsstamm.For more information, see Content root.

WebstammverzeichnisWeb root

Der Webstamm ist der Basispfad für öffentliche, statische Ressourcendateien, zum Beispiel:The web root is the base path for public, static resource files, such as:

  • Stylesheets ( .css)Stylesheets (.css)
  • JavaScript ( .js)JavaScript (.js)
  • Bilder ( .png, .jpg)Images (.png, .jpg)

Statische Dateien werden standardmäßig nur aus dem Webstammverzeichnis und dessen Unterverzeichnissen bereitgestellt.By default, static files are served only from the web root directory and its sub-directories. Standardmäßig lautet der Webstammpfad {Inhaltsstamm}/wwwroot.The web root path defaults to {content root}/wwwroot. Sie können einen anderen Webstamm festlegen, indem Sie den entsprechenden Pfad beim Erstellen des Hosts festlegen.Specify a different web root by setting its path when building the host. Weitere Informationen finden Sie unter Webstamm.For more information, see Web root.

Verhindern Sie das Veröffentlichen von Dateien in wwwroot mit dem <Content>-Projektelement in der Projektdatei.Prevent publishing files in wwwroot with the <Content> project item in the project file. Im folgenden Beispiel wird verhindert, dass Inhalte im Verzeichnis wwwroot/local und dessen Unterverzeichnissen veröffentlicht werden:The following example prevents publishing content in wwwroot/local and its sub-directories:

<ItemGroup>
  <Content Update="wwwroot\local\**\*.*" CopyToPublishDirectory="Never" />
</ItemGroup>

In Razor-Dateien ( .cshtml) verweisen Tilde und Schrägstrich (~/) auf den Webstamm.In Razor .cshtml files, tilde-slash (~/) points to the web root. Ein mit ~/ beginnender Pfad wird als virtueller Pfad bezeichnet.A path beginning with ~/ is referred to as a virtual path.

Weitere Informationen finden Sie unter Statische Dateien in ASP.NET Core.For more information, see Statische Dateien in ASP.NET Core.

In diesem Artikel finden Sie eine Übersicht über die wichtigsten Themen zum Entwickeln von ASP.NET Core-Apps.This article is an overview of key topics for understanding how to develop ASP.NET Core apps.

Die Startup-KlasseThe Startup class

In der Startup-Klasse:The Startup class is where:

  • werden die von der App erforderlichen Dienste konfiguriert.Services required by the app are configured.
  • wird die Pipeline zur Anforderungsverarbeitung definiert.The request handling pipeline is defined.

Dienste sind Komponenten, die von der App verwendet werden.Services are components that are used by the app. Eine Protokollierungskomponente stellt beispielsweise einen Dienst dar.For example, a logging component is a service. wird Code, der Dienste konfiguriert (oder registriert) der Startup.ConfigureServices-Methode hinzugefügt.Code to configure (or register) services is added to the Startup.ConfigureServices method.

Die Pipeline zur Anforderungsverarbeitung besteht aus mehreren Middlewarekomponenten.The request handling pipeline is composed as a series of middleware components. Eine Middleware kann beispielsweise Anforderungen für statische Dateien verarbeiten oder HTTP-Anforderungen zu HTTPS umleiten.For example, a middleware might handle requests for static files or redirect HTTP requests to HTTPS. Jede Middleware führt asynchrone Operationen in einem HttpContext aus und ruft anschließend entweder die nächste Middleware in der Pipeline auf oder beendet die Anforderung.Each middleware performs asynchronous operations on an HttpContext and then either invokes the next middleware in the pipeline or terminates the request. Code zum Konfigurieren der Pipeline zur Anforderungsverarbeitung wird der Startup.Configure-Methode hinzugefügt.Code to configure the request handling pipeline is added to the Startup.Configure method.

Beispiel für eine Startup-Klasse:Here's a sample Startup class:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

        services.AddDbContext<MovieContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("MovieDb")));
    }

    public void Configure(IApplicationBuilder app)
    {
        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseMvc();
    }
}

Weitere Informationen finden Sie unter Anwendungsstart in ASP.NET Core.For more information, see Anwendungsstart in ASP.NET Core.

Abhängigkeitsinjektion (Dienste)Dependency injection (services)

ASP.NET Core verfügt über ein integriertes DI-Framework (Dependency Injection), durch das konfigurierte Dienste für die Klassen einer App bereitgestellt werden.ASP.NET Core has a built-in dependency injection (DI) framework that makes configured services available to an app's classes. Eine Möglichkeit zum Abrufen einer Instanz eines Diensts in einer Klasse ist das Erstellen eines Konstruktors mit einem Parameter des erforderlichen Typs.One way to get an instance of a service in a class is to create a constructor with a parameter of the required type. Der Parameter kann der Diensttyp oder eine Schnittstelle sein.The parameter can be the service type or an interface. Das DI-System stellt den Dienst zur Laufzeit bereit.The DI system provides the service at runtime.

Hier ist eine Klasse, in der Dependency Injection verwendet wird, um ein Entity Framework Core-Kontextobjekt abzurufen.Here's a class that uses DI to get an Entity Framework Core context object. Die hervorgehobene Zeile ist ein Beispiel für die Konstruktorinjektion:The highlighted line is an example of constructor injection:

public class IndexModel : PageModel
{
    private readonly RazorPagesMovieContext _context;

    public IndexModel(RazorPagesMovieContext context)
    {
        _context = context;
    }

    // ...

    public async Task OnGetAsync()
    {
        Movies = await _context.Movies.ToListAsync();
    }
}

Obwohl die Dependency Injection integriert ist, können Sie hier, falls gewünscht, einen IoC-Container eines Drittanbieters einbinden.While DI is built in, it's designed to let you plug in a third-party Inversion of Control (IoC) container if you prefer.

Weitere Informationen finden Sie unter Dependency Injection in ASP.NET Core.For more information, see Dependency Injection in ASP.NET Core.

MiddlewareMiddleware

Die Pipeline zur Anforderungsverarbeitung besteht aus mehreren Middlewarekomponenten.The request handling pipeline is composed as a series of middleware components. Jede Komponente führt asynchrone Operationen in einem HttpContext aus und ruft anschließend entweder die nächste Middleware in der Pipeline auf oder beendet die Anforderung.Each component performs asynchronous operations on an HttpContext and then either invokes the next middleware in the pipeline or terminates the request.

Gemäß Konvention wird eine Middlewarekomponente der Pipeline durch Aufrufen ihrer Use...-Erweiterungsmethode in der Startup.Configure-Methode hinzugefügt.By convention, a middleware component is added to the pipeline by invoking its Use... extension method in the Startup.Configure method. Um beispielsweise das Rendering statischer Dateien zu aktivieren, rufen Sie UseStaticFiles auf.For example, to enable rendering of static files, call UseStaticFiles.

Der hervorgehobene Code in dem folgenden Beispiel konfiguriert die Pipeline zur Anforderungsverarbeitung:The highlighted code in the following example configures the request handling pipeline:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

        services.AddDbContext<MovieContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("MovieDb")));
    }

    public void Configure(IApplicationBuilder app)
    {
        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseMvc();
    }
}

ASP.NET Core enthält eine Reihe umfangreicher integrierter Middleware. Außerdem können Sie benutzerdefinierte Middleware erstellen.ASP.NET Core includes a rich set of built-in middleware, and you can write custom middleware.

Weitere Informationen finden Sie unter ASP.NET Core-Middleware.For more information, see ASP.NET Core-Middleware.

HostHost

Beim Starten erstellt eine ASP.NET Core-App einen Host.An ASP.NET Core app builds a host on startup. Der Host ist ein Objekt, das alle Ressourcen der App kapselt, z. B.:The host is an object that encapsulates all of the app's resources, such as:

  • eine HTTP-ServerimplementierungAn HTTP server implementation
  • MiddlewarekomponentenMiddleware components
  • ProtokollierungLogging
  • DIDI
  • KonfigurationConfiguration

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.The main reason for including all of the app's interdependent resources in one object is lifetime management: control over app startup and graceful shutdown.

Es stehen zwei Hosts zur Verfügung: der Webhost und der generische Host.Two hosts are available: the Web Host and the Generic Host. In ASP.NET Core 2.x ist der generische Host nur für nicht webbasierte Szenarios verfügbar.In ASP.NET Core 2.x, the Generic Host is only for non-web scenarios.

Der Code zum Erstellen eines Hosts befindet sich in Program.Main:The code to create a host is in Program.Main:

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

Die Methode CreateDefaultBuilder konfiguriert einen Host mit häufig verwendeten Optionen wie den folgenden:The CreateDefaultBuilder method configures a host with commonly used options, such as the following:

  • Verwenden von Kestrel als Webserver, und aktivieren der Integration von Internetinformationsdiensten.Use Kestrel as the web server and enable IIS integration.
  • Laden der Konfiguration aus appsettings.json, appsettings.[EnvironmentName].json, Umgebungsvariablen, Befehlszeilenargumenten und anderen Konfigurationsquellen.Load configuration from appsettings.json, appsettings.{Environment Name}.json, environment variables, command line arguments, and other configuration sources.
  • Senden von Protokollausgaben an die Konsole und Debuggen von Anbietern.Send logging output to the console and debug providers.

Weitere Informationen finden Sie unter ASP.NET Core-Webhost.For more information, see ASP.NET Core-Webhost.

Nicht webbasierte SzenariosNon-web scenarios

Mit dem generischen Host können andere App-Typen querschnittliche Frameworkerweiterungen wie Protokollierung, Dependency Injection (DI), Konfiguration und Lebensdauerverwaltung der App verwenden.The Generic Host allows other types of apps to use cross-cutting framework extensions, such as logging, dependency injection (DI), configuration, and app lifetime management. Weitere Informationen finden Sie unter Generischer .NET-Host und Hintergrundtasks mit gehosteten Diensten in ASP.NET Core.For more information, see Generischer .NET-Host and Hintergrundtasks mit gehosteten Diensten in ASP.NET Core.

ServerServers

Eine ASP.NET Core-App verwendet eine HTTP-Serverimplementierung zum Lauschen auf HTTP-Anforderungen.An ASP.NET Core app uses an HTTP server implementation to listen for HTTP requests. Der Server sendet Anforderungen an die App in Form von mehreren Anforderungsfunktionen in einem HttpContext.The server surfaces requests to the app as a set of request features composed into an HttpContext.

Die folgenden Serverimplementierungen werden von ASP.NET Core bereitgestellt:ASP.NET Core provides the following server implementations:

  • Kestrel ist ein plattformübergreifender Webserver.Kestrel is a cross-platform web server. Kestrel wird häufig in einer Reverseproxykonfiguration unter Verwendung von IIS ausgeführt.Kestrel is often run in a reverse proxy configuration using IIS. Kestrel kann als öffentlich zugänglicher Edgeserver ausgeführt werden, der direkt mit dem Internet verbunden ist.Kestrel can be run as a public-facing edge server exposed directly to the Internet.
  • Der IIS-HTTP-Server ist ein Server für Windows, der IIS verwendet.IIS HTTP Server is a server for windows that uses IIS. Mit diesem Server werden die ASP.NET Core-App und IIS im gleichen Prozess ausgeführt.With this server, the ASP.NET Core app and IIS run in the same process.
  • HTTP.sys ist ein Server für Windows, der nicht mit IIS verwendet wird.HTTP.sys is a server for Windows that isn't used with IIS.

Die folgenden Serverimplementierungen werden von ASP.NET Core bereitgestellt:ASP.NET Core provides the following server implementations:

  • Kestrel ist ein plattformübergreifender Webserver.Kestrel is a cross-platform web server. Kestrel wird häufig in einer Reverseproxykonfiguration unter Verwendung von IIS ausgeführt.Kestrel is often run in a reverse proxy configuration using IIS. Kestrel kann als öffentlich zugänglicher Edgeserver ausgeführt werden, der direkt mit dem Internet verbunden ist.Kestrel can be run as a public-facing edge server exposed directly to the Internet.
  • HTTP.sys ist ein Server für Windows, der nicht mit IIS verwendet wird.HTTP.sys is a server for Windows that isn't used with IIS.

Weitere Informationen finden Sie unter Webserverimplementierungen in ASP.NET Core.For more information, see Webserverimplementierungen in ASP.NET Core.

KonfigurationConfiguration

ASP.NET Core bietet ein Konfigurationsframework, das Einstellungen als Name/Wert-Paare aus einer geordneten Menge von Konfigurationsanbietern abruft.ASP.NET Core provides a configuration framework that gets settings as name-value pairs from an ordered set of configuration providers. Integrierte Konfigurationsanbieter gibt es für zahlreiche Quellen wie .json-Dateien, .xml-Dateien, Umgebungsvariablen und Befehlszeilenargumente.There are built-in configuration providers for a variety of sources, such as .json files, .xml files, environment variables, and command-line arguments. Sie können auch benutzerdefinierte Konfigurationsanbieter schreiben.You can also write custom configuration providers.

Zum Beispiel könnten Sie angeben, dass die Konfiguration aus appsettings.json und Umgebungsvariablen stammt.For example, you could specify that configuration comes from appsettings.json and environment variables. Wenn dann der ConnectionString-Wert angefordert wird, sucht das Framework zuerst in der appsettings.json-Datei.Then when the value of ConnectionString is requested, the framework looks first in the appsettings.json file. Wenn der Wert sowohl dort als auch in einer Umgebungsvariablen gefunden wird, hat der Wert aus der Umgebungsvariablen Vorrang.If the value is found there but also in an environment variable, the value from the environment variable would take precedence.

Zum Verwalten von vertraulichen Konfigurationsdaten wie Passwörtern bietet ASP.NET Core ein Geheimnisverwaltungstool.For managing confidential configuration data such as passwords, ASP.NET Core provides a Secret Manager tool. Für Produktionsgeheimnisse empfehlen wir Azure Key Vault.For production secrets, we recommend Azure Key Vault.

Weitere Informationen finden Sie unter Konfiguration in ASP.NET Core.For more information, see Konfiguration in ASP.NET Core.

OptionenOptions

Wo möglich, folgt ASP.NET Core dem Optionsmuster zum Speichern und Abrufen von Konfigurationswerten.Where possible, ASP.NET Core follows the options pattern for storing and retrieving configuration values. Das Optionsmuster verwendet Klassen, um Gruppen von zusammengehörigen Einstellungen darzustellen.The options pattern uses classes to represent groups of related settings.

Im folgenden Codebeispiel werden WebSockets-Optionen festgelegt:For example, the following code sets WebSockets options:

var options = new WebSocketOptions  
{  
   KeepAliveInterval = TimeSpan.FromSeconds(120),  
   ReceiveBufferSize = 4096
};  

app.UseWebSockets(options);

Weitere Informationen finden Sie unter Optionsmuster in ASP.NET Core.For more information, see Optionsmuster in ASP.NET Core.

UmgebungenEnvironments

Ausführungsumgebungen wie Entwicklung, Staging und Produktion sind in ASP.NET Core von besonderer Bedeutung.Execution environments, such as Development, Staging, and Production, are a first-class notion in ASP.NET Core. Um die Umgebung anzugeben, in der eine App ausgeführt wird, stellen Sie die ASPNETCORE_ENVIRONMENT-Umgebungsvariable ein.You can specify the environment an app is running in by setting the ASPNETCORE_ENVIRONMENT environment variable. ASP.NET Core liest diese Umgebungsvariable beim Start der App und speichert den Wert in einer IHostingEnvironment-Implementierung.ASP.NET Core reads that environment variable at app startup and stores the value in an IHostingEnvironment implementation. Das Umgebungsobjekt ist in der gesamten App mithilfe der Dependency Injection verfügbar.The environment object is available anywhere in the app via DI.

Im folgenden Codebeispiel aus der Startup-Klasse wird die App so konfiguriert, dass detaillierte Fehlerinformationen nur bereitgestellt werden, wenn die App in der Entwicklung ausgeführt wird:The following sample code from the Startup class configures the app to provide detailed error information only when it runs in development:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseMvc();
}

Weitere Informationen finden Sie unter Verwenden von mehreren Umgebungen in ASP.NET Core.For more information, see Verwenden von mehreren Umgebungen in ASP.NET Core.

ProtokollierungLogging

ASP.NET Core unterstützt eine Protokollierungs-API, die mit einer Vielzahl von integrierten Protokollierungsanbietern und Drittanbieter-Protokollierungslösungen zusammenarbeitet.ASP.NET Core supports a logging API that works with a variety of built-in and third-party logging providers. Zu den verfügbaren Anbietern gehören folgende:Available providers include the following:

  • KonsoleConsole
  • DebugDebug
  • Ereignisablaufverfolgung unter WindowsEvent Tracing on Windows
  • Windows-EreignisprotokollWindows Event Log
  • TraceSourceTraceSource
  • Azure App ServiceAzure App Service
  • Azure Application InsightsAzure Application Insights

Schreiben Sie Protokolle aus jeder Stelle im Code einer App, indem Sie ein ILogger-Objekt aus Dependency Injection abrufen und Protokollmethoden aufrufen.Write logs from anywhere in an app's code by getting an ILogger object from DI and calling log methods.

Hier ist ein Beispielcode, in dem ein ILogger-Objekt mit Konstruktorinjektion und den hervorgehobenen Aufrufen der Protokollierungsmethode verwendet wird.Here's sample code that uses an ILogger object, with constructor injection and the logging method calls highlighted.

public class TodoController : ControllerBase
{
    private readonly ILogger _logger;

    public TodoController(ILogger<TodoController> logger)
    {
        _logger = logger;
    }

    [HttpGet("{id}", Name = "GetTodo")]
    public ActionResult<TodoItem> GetById(string id)
    {
        _logger.LogInformation(LoggingEvents.GetItem, "Getting item {Id}", id);
        // Item lookup code removed.
        if (item == null)
        {
            _logger.LogWarning(LoggingEvents.GetItemNotFound, "GetById({Id}) NOT FOUND", id);
            return NotFound();
        }
        return item;
    }
}

Mithilfe der ILogger-Schnittstelle können Sie eine beliebige Anzahl von Feldern an den Protokollierungsanbieter übergeben.The ILogger interface lets you pass any number of fields to the logging provider. Die Felder werden häufig dazu verwendet, eine Meldungszeichenfolge zu erstellen, der Anbieter kann sie aber auch als einzelne Felder an einen Datenspeicher senden.The fields are commonly used to construct a message string, but the provider can also send them as separate fields to a data store. Dieses Funktion ermöglicht Protokollierungsanbietern das Implementieren von semantischer Protokollierung, auch bezeichnet als strukturierte Protokollierung.This feature makes it possible for logging providers to implement semantic logging, also known as structured logging.

Weitere Informationen finden Sie unter Protokollieren in .NET Core und ASP.NET Core.For more information, see Protokollieren in .NET Core und ASP.NET Core.

RoutingRouting

Eine Route ist ein URL-Muster, das einem Handler zugeordnet ist.A route is a URL pattern that is mapped to a handler. Der Handler ist normalerweise eine Razor-Seite, eine Aktionsmethode in einem MVC-Controller oder einer Middleware.The handler is typically a Razor page, an action method in an MVC controller, or a middleware. Mit ASP.NET Core-Routing können Sie steuern, welche URLs von Ihrer App verwendet werden.ASP.NET Core routing gives you control over the URLs used by your app.

Weitere Informationen finden Sie unter Routing in ASP.NET Core.For more information, see Routing in ASP.NET Core.

FehlerbehandlungError handling

ASP.NET Core verfügt über integrierte Funktionen zur Fehlerbehandlung wie beispielsweise:ASP.NET Core has built-in features for handling errors, such as:

  • eine Seite mit Ausnahmen für EntwicklerA developer exception page
  • benutzerdefinierte FehlerseitenCustom error pages
  • statische StatuscodeseitenStatic status code pages
  • Fehlerbehandlung während des StartsStartup exception handling

Weitere Informationen finden Sie unter Fehlerbehandlung in ASP.NET Core.For more information, see Fehlerbehandlung in ASP.NET Core.

Übermitteln von HTTP-AnforderungenMake HTTP requests

Eine Implementierung von IHttpClientFactory ist verfügbar zum Erstellen von HttpClient-Instanzen.An implementation of IHttpClientFactory is available for creating HttpClient instances. Die Factory:The factory:

  • Ein zentraler Ort für das Benennen und Konfigurieren logischer HttpClient-Instanzen wird damit geboten.Provides a central location for naming and configuring logical HttpClient instances. Zum Beispiel kann ein github-Client für den Zugriff auf GitHub registriert und konfiguriert werden.For example, a github client can be registered and configured to access GitHub. Ein Standard-Client kann für andere Zwecke registriert werden.A default client can be registered for other purposes.
  • Unterstützt die Registrierung und Verkettung von mehreren delegierenden Handlern, um eine Pipeline für die Middleware für ausgehende Anforderungen zu erstellen.Supports registration and chaining of multiple delegating handlers to build an outgoing request middleware pipeline. Dieses Muster ähnelt der eingehenden Pipeline für Middleware in ASP.NET Core.This pattern is similar to the inbound middleware pipeline in ASP.NET Core. Das Muster bietet einen Mechanismus zum Verwalten von übergreifenden Belangen bezüglich HTTP-Anforderungen, einschließlich der Zwischenspeicherung, Fehlerbehandlung, Serialisierung und Protokollierung.The pattern provides a mechanism to manage cross-cutting concerns around HTTP requests, including caching, error handling, serialization, and logging.
  • Integrierbar in Polly, eine beliebte Drittanbieter-Bibliothek zur Behandlung vorübergehender Fehler.Integrates with Polly, a popular third-party library for transient fault handling.
  • Das Pooling und die Lebensdauer von zugrunde liegenden HttpClientHandler-Instanzen werden verwaltet, um gängige DNS-Probleme zu vermeiden, die bei der manuellen Verwaltung der HttpClient-Lebensdauer auftreten.Manages the pooling and lifetime of underlying HttpClientHandler instances to avoid common DNS problems that occur when manually managing HttpClient lifetimes.
  • Eine konfigurierbare Protokollierungsfunktion wird (über ILogger) für alle Anforderungen hinzugefügt, die über Clients gesendet werden, die von der Factory erstellt wurden.Adds a configurable logging experience (via ILogger) for all requests sent through clients created by the factory.

Weitere Informationen finden Sie unter Stellen von HTTP-Anforderungen mithilfe von IHttpClientFactory in ASP.NET Core.For more information, see Stellen von HTTP-Anforderungen mithilfe von IHttpClientFactory in ASP.NET Core.

InhaltsstammverzeichnisContent root

Der Inhaltsstamm ist der Basispfad zu Folgendem:The content root is the base path to the:

  • Der ausführbaren Datei ( .exe), die die App hostet.Executable hosting the app (.exe).
  • Kompilierten Assemblys, die die App bilden ( .dll).Compiled assemblies that make up the app (.dll).
  • Inhaltsdateien ohne Code, die von der App verwendet werden, wie z. B.:Non-code content files used by the app, such as:
    • Razor-Dateien ( .cshtml, .razor)Razor files (.cshtml, .razor)
    • Konfigurationsdateien ( .json, .xml)Configuration files (.json, .xml)
    • Datendateien ( .db)Data files (.db)
  • Webstamm, in der Regel der veröffentlichte Ordner wwwroot.Web root, typically the published wwwroot folder.

Entwicklungsphase:During development:

  • Der Inhaltsstamm ist standardmäßig auf das Stammverzeichnis des Projekts festgelegt.The content root defaults to the project's root directory.
  • Das Stammverzeichnis des Projekts dient zum Erstellen von Folgendem:The project's root directory is used to create the:
    • Pfad zu den Inhaltsdateien ohne Code der App im Stammverzeichnis des Projekts.Path to the app's non-code content files in the project's root directory.
    • Webstamm, in der Regel der Ordner wwwroot im Stammverzeichnis des Projekts.Web root, typically the wwwroot folder in the project's root directory.

Ein alternativer Inhaltsstammpfad kann beim Erstellen des Hosts angegeben werden.An alternative content root path can be specified when building the host. Weitere Informationen finden Sie unter ASP.NET Core-Webhost.For more information, see ASP.NET Core-Webhost.

WebstammverzeichnisWeb root

Der Webstamm ist der Basispfad zu öffentlichen, statischen Ressourcendateien ohne Code, wie z. B.:The web root is the base path to public, non-code, static resource files, such as:

  • Stylesheets ( .css)Stylesheets (.css)
  • JavaScript ( .js)JavaScript (.js)
  • Bilder ( .png, .jpg)Images (.png, .jpg)

Statische Dateien werden standardmäßig nur aus dem Webstammverzeichnis (samt Unterverzeichnissen) bereitgestellt.Static files are only served by default from the web root directory (and sub-directories).

Der Webstammpfad ist standardmäßig auf {Inhaltsstamm}/wwwroot festgelegt, doch beim Erstellen des Hosts kann ein anderer Webstamm angegeben werden.The web root path defaults to {content root}/wwwroot, but a different web root can be specified when building the host. Weitere Informationen finden Sie unter Webstamm.For more information, see Web root.

Verhindern Sie das Veröffentlichen von Dateien in wwwroot mit dem <Content>-Projektelement in der Projektdatei.Prevent publishing files in wwwroot with the <Content> project item in the project file. Im folgenden Beispiel wird verhindert, dass Inhalte im wwwroot/local-Verzeichnis und in Unterverzeichnisse veröffentlicht werden:The following example prevents publishing content in the wwwroot/local directory and sub-directories:

<ItemGroup>
  <Content Update="wwwroot\local\**\*.*" CopyToPublishDirectory="Never" />
</ItemGroup>

In Razor-Dateien ( .cshtml) zeigen Tilde und Schrägstrich (~/) auf den Webstamm.In Razor (.cshtml) files, the tilde-slash (~/) points to the web root. Ein mit ~/ beginnender Pfad wird als virtueller Pfad bezeichnet.A path beginning with ~/ is referred to as a virtual path.

Weitere Informationen finden Sie unter Statische Dateien in ASP.NET Core.For more information, see Statische Dateien in ASP.NET Core.