Das Standardprojekt für eine ASP.NET Core MVC-Webanwendung basiert auf einer klar strukturierten Organisation, die Entwicklern eine solide Grundlage für die Erstellung von Webanwendungen bietet. Beim Starten eines neuen Projekts mithilfe der ASP.NET Core MVC-Vorlage erhält man ein Projekt, das auf Best Practices für die Erstellung dynamischer Web-Apps ausgerichtet ist. In diesem Abschnitt betrachten wir die Funktionsweise der verschiedenen Teile dieses Projekts, insbesondere in Bezug auf die Konfiguration und die grundlegende Benutzerregistrierung.
Zunächst einmal befindet sich im Projektordner "Properties" eine wichtige Datei namens launchSettings.json. Diese Datei enthält Konfigurationseinstellungen, die die Art und Weise bestimmen, wie das Projekt lokal gestartet wird. Besonders auffällig sind hier die Portnummern, die für den Betrieb des Kestrel-Servers festgelegt sind. Im Standardfall sind für HTTP und HTTPS unterschiedliche Ports zugewiesen, wie zum Beispiel http://localhost:5047 für HTTP und https://localhost:7047 für HTTPS. Diese Portnummern können nach Belieben geändert werden, um Konflikte zu vermeiden oder um eine spezifische Umgebung zu simulieren.
Ein weiterer wichtiger Aspekt der ASP.NET Core MVC-Vorlage ist die Integration von Benutzerregistrierung und Authentifizierung. Die Standardvorlage verfolgt dabei das Prinzip der "doppelten Opt-In" (Double Opt-In, DOI). Dies bedeutet, dass ein Benutzer nach der Registrierung mit einer E-Mail-Adresse und einem Passwort eine Bestätigungs-E-Mail erhält. Der Benutzer muss dann auf einen Link in der E-Mail klicken, um seine Registrierung abzuschließen. Diese Funktionalität bietet eine grundlegende Sicherheitsebene und stellt sicher, dass nur echte Benutzer Konten erstellen können.
Um diese Funktionalität zu simulieren, ohne einen echten E-Mail-Dienst zu verwenden, wird empfohlen, den Schritt der E-Mail-Bestätigung lokal zu testen. In diesem Fall kann die E-Mail-Bestätigung einfach übersprungen werden, indem die Benutzeroberfläche manuell nachgebildet wird. Nach der Bestätigung können Benutzer ihre Anmeldedaten eingeben und in ihr Benutzerkonto einsteigen, um ihre Daten zu verwalten. Diese Funktionalitäten umfassen die Möglichkeit, persönliche Informationen wie Telefonnummer und E-Mail-Adresse zu aktualisieren, sowie die Konfiguration von Zwei-Faktor-Authentifizierung (2FA) für zusätzlichen Schutz.
Die MVC-Projektvorlage von ASP.NET Core strukturiert sich in verschiedene Ordner und Dateien, die jeweils eine spezifische Rolle im Gesamtaufbau der Anwendung spielen. Zu den zentralen Ordnern gehören unter anderem:
-
Controllers: Dieser Ordner enthält C#-Klassen, die die Geschäftslogik verwalten und die Daten an die entsprechenden Views weiterleiten. Jede dieser Klassen stellt eine Controller-Klasse dar, die mit den Datenmodellen arbeitet.
-
Models: Modelle repräsentieren die Datenstruktur und die Geschäftslogik der Anwendung. Sie werden von den Controllern verwendet, um die Daten zu erstellen und an die View weiterzugeben. Beispiele hierfür sind Datenmodelle für Fehler oder Benutzerkonten.
-
Views: Dieser Ordner enthält Razor-Dateien, die HTML mit C#-Code kombinieren, um dynamische Webseiten zu erzeugen. Hier wird das grundlegende Layout der Seiten und die Darstellung von Benutzeroberflächenkomponenten wie Formularen und Navigation definiert.
-
Data: Dieser Ordner beinhaltet die Klassen, die mit der Datenbankverbindung und der Entity Framework Core-Migration für die Speicherung und Verwaltung der Benutzer- und Anwendungsdaten verbunden sind.
-
wwwroot: In diesem Ordner befinden sich statische Inhalte wie CSS-Dateien, JavaScript-Bibliotheken und Bilder, die für die Darstellung der Webseiten erforderlich sind.
Ein interessantes Detail der ASP.NET Core MVC-Anwendung ist der Einsatz von ASP.NET Core Identity zur Handhabung von Authentifizierung und Autorisierung. Dies ermöglicht die Verwaltung von Benutzerkonten und die Durchführung von Sicherheitsprüfungen, etwa bei der Anmeldung oder der Passwortänderung.
Ein weiterer wichtiger Bestandteil ist die Konfiguration von Kestrel als Webserver. Kestrel ist der Cross-Plattform-Webserver, der in ASP.NET Core-Projekten verwendet wird. Die Konfiguration für Kestrel erfolgt in der Datei launchSettings.json und ist für den lokalen Betrieb der Anwendung während der Entwicklung von Bedeutung. Beim Wechsel von der Entwicklungs- zur Produktionsumgebung wird Kestrel in der Regel durch einen anderen Webserver ersetzt, der besser für den Produktivbetrieb geeignet ist.
Neben der Benutzerverwaltung und der Datenbankinteraktion spielt auch das Front-End eine zentrale Rolle. Das Projekt verwendet standardmäßig Bootstrap und jQuery, um eine ansprechende und funktionale Benutzeroberfläche zu gestalten. Die Integration dieser Front-End-Technologien ermöglicht es Entwicklern, responsive Layouts zu erstellen, die auf verschiedenen Bildschirmgrößen gut aussehen.
Schließlich sind auch die Einstellungen in der Datei appsettings.json von großer Bedeutung. Diese Datei enthält viele Konfigurationseinstellungen, darunter auch die Verbindung zu Datenbanken oder Drittanbieter-Diensten, und wird zur Laufzeit geladen. Dabei kann zwischen verschiedenen Konfigurationen für Entwicklungs-, Test- und Produktionsumgebungen unterschieden werden.
Für den Leser ist es wichtig zu verstehen, dass dieses Projekt eine klare und strukturierte Grundlage für die Entwicklung von Webanwendungen darstellt. Die Trennung von Geschäftslogik (Controller), Datenmodellen (Models) und der Benutzeroberfläche (Views) folgt den Prinzipien des Model-View-Controller (MVC)-Designmusters, was die Wartung und Erweiterung der Anwendung erheblich vereinfacht.
Es ist ebenfalls entscheidend zu wissen, dass die Sicherheitsaspekte, wie die Nutzung von HTTPS für sichere Verbindungen und der doppelte Opt-In-Prozess für die Benutzerregistrierung, in einer echten Produktionsumgebung weiter ausgebaut und angepasst werden müssen. Auch wenn die Standardvorlage eine gute Basis bietet, erfordert eine produktive Anwendung oft zusätzliche Sicherheitsmaßnahmen, wie etwa die Integration von E-Mail-Diensten für die Bestätigungs-E-Mails oder die Implementierung eines umfassenden Authentifizierungssystems.
Wie man eine Datenbankverbindung mit ADO.NET herstellt und verwaltet
ADO.NET bietet eine leistungsfähige Infrastruktur zur Kommunikation mit relationalen Datenbanken, die es Entwicklern ermöglicht, auf eine Vielzahl von Datenbanken zuzugreifen. Die wichtigsten Klassen in ADO.NET sind DbConnection, DbCommand und DbDataReader. Diese werden in einer Vielzahl von Datenbankmanagementsystemen eingesetzt und ermöglichen die Arbeit mit Datenbankverbindungen, -abfragen und -ergebnissen. Besonders hervorzuheben ist, dass Hersteller von Datenbanksoftware, wie Microsoft mit SQL Server, ihre eigenen Implementierungen dieser Klassen bereitstellen können, um spezifische Features und Optimierungen zu bieten.
Ein wesentliches Element in der Arbeit mit ADO.NET ist die Verwaltung der Verbindung zur Datenbank. Die Klasse SqlConnection wird verwendet, um eine Verbindung zu einem SQL Server herzustellen und zu verwalten. Ihre wichtigsten Eigenschaften umfassen unter anderem ConnectionString, State und ServerVersion. Mit der Methode Open() wird die Verbindung zur Datenbank geöffnet, während Close() die Verbindung wieder schließt. Die ConnectionString-Eigenschaft ermöglicht die Angabe aller notwendigen Parameter zur Herstellung einer Verbindung, wie zum Beispiel den Datenbanknamen, den Server, die Anmeldeinformationen und die Verschlüsselungsoptionen.
Ein weiterer wichtiger Bestandteil der ADO.NET-Architektur ist das SqlCommand-Objekt. Es stellt sicher, dass SQL-Abfragen und -Befehle an die Datenbank übermittelt werden. Zu den wichtigsten Methoden gehören ExecuteReader, ExecuteNonQuery und ExecuteXmlReader, die jeweils dazu verwendet werden, unterschiedliche Arten von SQL-Befehlen auszuführen. Wenn eine Abfrage ein Resultatset (zum Beispiel bei einer SELECT-Abfrage) zurückgibt, wird ExecuteReader verwendet, um die Daten zeilenweise zu lesen. Wird hingegen eine Aktion ausgeführt, die keine Daten zurückgibt (z.B. INSERT, UPDATE, DELETE), ist ExecuteNonQuery die geeignete Methode. Wenn die Abfrage XML-Daten zurückliefert, wird ExecuteXmlReader verwendet.
Die Verwaltung von Parametern innerhalb eines SQL-Befehls ist ebenso zentral. Die Klasse SqlParameter ermöglicht das Hinzufügen von Parametern zu einem SqlCommand. Diese Parameter können sowohl benannte als auch unbenannte Parameter sein und ermöglichen eine sichere und effiziente Abfrageausführung. Wichtige Eigenschaften von SqlParameter sind ParameterName, Value und SqlDbType.
Der SqlDataReader wird verwendet, um die Ergebnisse von SQL-Abfragen zu verarbeiten. Mit dieser Klasse können Entwickler die zurückgegebenen Daten zeilenweise durchlaufen und verarbeiten. Sie bietet eine Reihe nützlicher Methoden wie Read(), GetInt32(), GetString() und GetDecimal(), mit denen Entwickler auf die jeweiligen Datentypen zugreifen können.
Ein weiteres nützliches Feature von SqlConnection sind die Ereignisse StateChange und InfoMessage. Das StateChange-Ereignis wird ausgelöst, wenn sich der Status der Verbindung ändert, und das InfoMessage-Ereignis gibt zusätzliche Informationen von der Datenbank zurück, wie etwa Warnungen oder Statusnachrichten.
In der Praxis wird oft ein einfaches Konsolenprogramm verwendet, um die Arbeit mit ADO.NET zu demonstrieren. Hier wird Schritt für Schritt eine Verbindung zu SQL Server hergestellt, und es werden unterschiedliche Authentifizierungsmethoden unterstützt, wie zum Beispiel die Windows-Authentifizierung und SQL-Login. Dabei spielt es eine wichtige Rolle, welche Verbindungseinstellungen und -parameter für die spezifische SQL Server-Instanz oder Azure SQL-Datenbank erforderlich sind.
Ein Beispielcode zeigt, wie man mithilfe der Klasse SqlConnectionStringBuilder eine gültige Verbindungszeichenfolge erstellt. Die Verbindungszeichenfolge enthält alle nötigen Informationen zur Datenbank, wie den Servernamen, den Datenbanknamen und die Authentifizierungsmethoden. Es wird auch empfohlen, in einer produktiven Umgebung immer verschlüsselte Verbindungen zu verwenden und sicherzustellen, dass die Verbindungseinstellungen den Sicherheitsanforderungen entsprechen.
Besonders bei der Arbeit mit Cloud-Datenbanken, wie etwa Azure SQL, gibt es einige zusätzliche Überlegungen zu berücksichtigen. Azure SQL erfordert oft die Angabe von spezifischen Netzwerkdetails, wie dem Servernamen und Port. Zudem sollten Entwickler sicherstellen, dass ihre Verbindungseinstellungen korrekt sind, um die Sicherheit und Zuverlässigkeit der Verbindung zu gewährleisten.
Ein weiterer praktischer Tipp bei der Arbeit mit ADO.NET ist die Handhabung von Ausnahmen. Eine SqlException wird geworfen, wenn ein Fehler bei der Ausführung eines SQL-Befehls auftritt. Entwickler sollten immer sicherstellen, dass sie Fehler richtig behandeln, um ihre Anwendungen robust und benutzerfreundlich zu gestalten.
Für das Verständnis der Arbeit mit ADO.NET ist es auch von Bedeutung, dass Entwickler sich mit den besten Praktiken zur Fehlerbehandlung und Leistungsoptimierung vertraut machen. Dazu gehört beispielsweise, unnötige Datenbankabfragen zu vermeiden, Verbindungen effizient zu verwalten und zu schließen sowie sicherzustellen, dass die Transaktionssteuerung korrekt implementiert wird.

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский