Funktionsweise von ASP.NET Core

Abgeschlossen

Eine ASP.NET Core-App ist im Wesentlichen eine .NET-App mit der Datei „Program.cs“, die die erforderlichen Web-App-Komponentenfeatures einrichtet und ausführt.

Die einfachste Datei „Program.cs“ einer ASP.NET Core-App sieht wie folgt aus:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

Mit dem vorherigen Code:

  • Eine grundlegende ASP.NET Core-Webanwendung wird eingerichtet, die an der Stamm-URL („/“) auf HTTP GET-Anforderungen lauscht und mit „Hallo Welt!“ antwortet.
  • Die App wird initialisiert, konfiguriert eine einzelne Route und startet den Webserver.

Blazor

Sie können eine interaktive Webbenutzeroberfläche mit ASP.NET Core mithilfe von Blazor erstellen. Blazor ist ein komponentenbasiertes Web-Benutzeroberflächenframework, das in ASP.NET Core integriert ist und zum Erstellen interaktiver Webbenutzeroberflächen mit HTML, CSS und C# verwendet wird.

Eine wiederverwendbare Blazor-Komponente, z. B. die folgende Counter-Komponente, wird in einer Datei vom Typ Counter.razor definiert:

@page "/counter"
@rendermode InteractiveServer

<PageTitle>Counter</PageTitle>

<h1>Counter</h1>

<p role="status">Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@code {
    private int currentCount = 0;

    private void IncrementCount()
    {
        currentCount++;
    }
}

Mit dem vorherigen Code:

  • Eine Komponente wird erstellt, die einen Zähler anzeigt.
  • Der @code-Block enthält die Logik der Komponente mit C#, einschließlich einer Methode zum Erhöhen des Zählers.
  • Der Zählerwert wird jedes Mal angezeigt und aktualisiert, wenn auf die Schaltfläche geklickt wird.
  • Ein Komponentenansatz ermöglicht die Wiederverwendung von Code in verschiedenen Teilen der Anwendung und bietet die Flexibilität, entweder im Browser oder auf dem Server in einer Blazor-App ausgeführt zu werden.

Die Counter-Komponente kann durch Hinzufügen des <Counter />-Elements einer beliebigen Webseite in der App hinzugefügt werden.

@page "/"

<PageTitle>Home</PageTitle>

<h1>Hello, world!</h1>

<Counter />

APIs

ASP.NET Core bietet Frameworks zum Erstellen von APIs, gRPC-Diensten und Echtzeit-Apps mit SignalR, um Datenupdates sofort an Clients zu pushen.

Grundlegende minimale API:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/hello", () => "Hello, World!");

app.Run();

Mit dem vorherigen Code:

  • Eine minimale API wird eingerichtet, die an der URL „/hello“ auf HTTP GET-Anforderungen lauscht und mit „Hallo Welt!“ antwortet.
  • WebApplicationBuilder wird verwendet, um die App zu konfigurieren.
  • Die MapGet-Methode definiert eine Route und einen Handler für GET-Anforderungen.

Middleware

ASP.NET Core verwendet eine Pipeline von Middlewarekomponenten zum Verarbeiten von HTTP-Anforderungen und -Antworten. Dieser modulare Ansatz bietet Flexibilität, sodass Sie die Funktionalität Ihrer Anwendung anpassen und erweitern können, indem Sie nach Bedarf Middlewarekomponenten hinzufügen oder entfernen.

Die Middlewarepipeline verarbeitet HTTP-Anforderungen sequenziell, um sicherzustellen, dass jede Komponente ihre festgelegte Aufgabe ausführen kann, bevor die Anforderung an die nächste Komponente in der Pipeline übergeben wird.

Hinzufügen integrierter Middleware in der Datei Program.cs:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.UseHttpsRedirection();

app.UseRouting();

app.MapStaticAssets();

app.UseAuthentication();

app.UseAuthorization();

app.MapGet("/", () => "Hello World!");

app.Run();

Im vorherigen Code wurden mehrere allgemeine Middlewarekomponenten hinzugefügt:

  • UseHttpsRedirection: Leitet HTTP-Anforderungen an HTTPS um.
  • UseRouting: Ermöglicht das Routing, um Anforderungen Endpunkten zuzuordnen.
  • MapStaticAssets: Optimiert die Übermittlung statischer Dateien wie HTML, CSS, JavaScript, Bilder und anderer Ressourcen.
  • UseAuthentication: Fügt Authentifizierungsfunktionen hinzu.
  • UseAuthorization: Fügt Autorisierungsfunktionen hinzu.
  • app.MapGet: Dies ist ein einfacher Endpunkt, der zeigt, dass die Anwendung ausgeführt wird.

Abhängigkeitsinjektion

ASP.NET Core beinhaltet integrierte Unterstützung für Abhängigkeitsinjektion (Dependency Injection, DI) zum Konfigurieren von Diensten, die von der App und den verschiedenen Frameworkkomponenten verwendet werden.

Sie können z. B. einen Dienst zentral mithilfe eines Frameworks wie EntityFramework Core konfigurieren, von dem andere Teile Ihrer App abhängig sind, um auf eine Datenbank zuzugreifen. Sie können wie folgt einen Datenbankkontext aus EntityFramework Core als Dienst mithilfe der Abhängigkeitsinjektion konfigurieren:

public class MyDbContext : DbContext
{
    public MyDbContext(DbContextOptions<MyDbContext> options) : base(options) { }
    
    public DbSet<Product> Products { get; set; } = default!;
}

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MyDbContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));

var app = builder.Build();

app.Run();

Mit dem vorherigen Code:

  • DbContext wird per Abhängigkeitsinjektion als Dienst konfiguriert.
  • WebApplicationBuilder wird verwendet, um die App zu konfigurieren.
  • Die AddDbContext-Methode registriert DbContext beim Abhängigkeitsinjektionscontainer.
  • Die Verbindungszeichenfolge wird aus der Konfiguration abgerufen und zum Einrichten des Datenbankkontexts verwendet.

Konfiguration

ASP.NET Core unterstützt den Zugriff auf Konfigurationsdaten aus einer Vielzahl von Quellen, z. B. JSON-Dateien, Umgebungsvariablen und Befehlszeilenargumenten.

Konfigurieren einer Verbindungszeichenfolge in der Datei appsetting.json:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;"
  }
}

In der Datei „Program.cs“:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MyDbContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));

var app = builder.Build();

app.Run();

Mit dem vorherigen Code:

  • Die Verbindungszeichenfolge wird in der Datei appsettings.json konfiguriert.
  • WebApplicationBuilder wird verwendet, um die App zu konfigurieren.
  • Die AddDbContext-Methode registriert DbContext beim Abhängigkeitsinjektionscontainer.
  • Die Verbindungszeichenfolge wird aus der Konfiguration abgerufen und zum Einrichten des Datenbankkontexts verwendet.

Überwachung und Diagnose

ASP.NET Core bietet eine umfassende Toolsuite zum Überwachen und Verwalten der Integrität und Leistung Ihrer Anwendungen. Diese Features können Ihrer Anwendung ganz einfach als Middlewarekomponenten hinzugefügt werden, wobei bestimmte Funktionen in Ihr Projekt integriert werden:

  • Integrierte Metriken: ASP.NET Core enthält integrierte Metriken, die verschiedene Aspekte der Anwendungsleistung nachverfolgen, z. B. Anforderungsraten, Antwortzeiten und Fehlerraten.
  • Flexibles Protokollierungsframework: Ein flexibles Protokollierungsframework ist integriert und unterstützt verschiedene Protokollierungsanbieter, einschließlich Konsole, Debuggen und Ereignisquelle. Dies hilft bei der Erfassung detaillierter Protokolle für Diagnose und Überwachung.
  • Ablaufverfolgung: ASP.NET Core unterstützt die verteilte Ablaufverfolgung, mit der Sie den Fluss von Anforderungen über verschiedene Dienste und Komponenten hinweg nachverfolgen können. Dies ist nützlich, um Leistungsprobleme zu diagnostizieren und die Interaktionen zwischen verschiedenen Teilen Ihrer Anwendung zu verstehen.
  • OpenTelemetry: ASP.NET Core kann in OpenTelemetry integriert werden, ein Open-Source-Framework für Einblicke für cloudnative Software. OpenTelemetry bietet standardisierte APIs und Instrumentierung zum Sammeln von Metriken, Protokollen und Ablaufverfolgungen, sodass Sie Ihre Anwendungen effizienter überwachen und eine Diagnose dafür ausführen können.
  • Integritätsprüfungen: Mit der API für Integritätsprüfungen können Sie den Status Ihrer Anwendung und deren Abhängigkeiten überwachen. Sie können Integritätsprüfungen konfigurieren, um den Status verschiedener Komponenten zu melden, z. B. den von Datenbanken, externen Diensten usw.
  • Diagnosetools: ASP.NET Core bietet verschiedene Diagnosetools wie dotnet-trace, dotnet-dump und dotnet-gcdump, die Ihnen helfen, Diagnosedaten von Ihrer Anwendung zu sammeln und zu analysieren.