Was ist ASP.NET?

Bei ASP.NET handelt es sich um ein ausgereiftes serverseitiges Webentwicklungs-Framework von Microsoft. Entwickler setzen ASP.NET ein, um dynamische Websites, Webapps und webbasierte Services zu realisieren. Nach jahrzehntelanger Entwicklung besteht das Framework heutzutage als ASP.NET Core fort.

Die Entwicklungsgeschichte von ASP.NET

Ursprünglich von Microsoft entwickelt, untersteht ASP.NET heute der .NET-Foundation. Während die ersten Versionen noch als proprietäre Software veröffentlicht wurden, handelt es sich beim modernen ASP.NET um ein Open-Source-Projekt.

Das heutzutage zum Einsatz kommende ASP.NET ist das Ergebnis eines jahrzehntelangen Entwicklungsprozesses. Dabei verlief der Werdegang von ASP über ASP.NET zu ASP.NET Core. Im Einklang mit dem Fortschritt der Webtechnologie vollzog sich über die Jahre eine drastische Veränderung des Frameworks. Schauen wir uns zunächst die Entwicklungsgeschichte von ASP.NET an:

Technologie Entwicklungsumgebung Aktuelle Version Dateiendungen
ASP Windows 3.0 / 2000-02 .asp
ASP.NET Windows 4.8 / 2019-04 .aspx/.aspx.cs, .aspx.vb etc.
ASP.NET Core cross-platform 5.0 / 2020-11 .cshtml, .vbhtml, etc.
Tipp

Erstellen Sie ohne Programmierkenntnisse Ihre eigene Homepage! Mit dem MyWebsite Homepage-Baukasten von IONOS gelingt dies ganz einfach.

Active Server Pages (ASP): Microsofts erste serverseitige Skriptsprache

Bei den ursprünglichen „Active Server Pages“ (ASP) handelte es sich um die erste von Microsoft veröffentlichte serverseitige Skriptsprache. Die Active Server Pages erlaubten ab dem Jahr 1996 die dynamische Erzeugung von Webseiten auf dem Server. Andere Skriptsprachen setzen normalerweise auf Linux als Betriebssystem und einen Open-Source-Webserver wie Apache. Demgegenüber positionierte Microsoft die Active Server Pages als Teil des auf Windows laufenden „Internet Information Server“ (IIS).

Die Grundfunktionalität von ASP ist in etwa vergleichbar mit PHP oder den „Java Server Pages“ (JSP). Bei allen drei Technologien kommen Template-Dateien zum Einsatz. Die Template-Dateien enthalten ausführbare Code-Schnipsel, die in statische HTML-Inhalte eingebettet sind. Der Code wird zwischen spezielle Tags geschrieben, um ihn vom umgebenden HTML abzugrenzen. Als Programmiersprachen kamen die damals verfügbaren, Microsoft-spezifischen Dialekte VBScript, JScript und PerlScript zum Einsatz.

Beim Zugriff auf eine URL durch den Browser („Request“) wird der Code auf dem Server ausgeführt. Die Ausführung erzeugt HTML-Inhalte, die in die vordefinierten HTML-Strukturen eingefügt werden. Das Gesamtergebnis ist ein aus statischen und dynamisch erzeugten HTML-Inhalten bestehendes Dokument; dieses wird als Antwort an den Browser ausgeliefert („Response“) und dem Nutzer angezeigt. Jede Änderung an Seiten-Inhalten, z. B. durch Benutzereingaben, erforderte einen kompletten Request-Response-Zyklus und damit ein Neuladen der Seite. Hier ein Beispiel für ASP-Code:

<p>
  The server’s current time:
  <%
    Response.Write Now()
  %>
</p>

Bei ASP handelte es sich noch nicht um ein Framework. Vielmehr kam eine lose Sammlung einer Handvoll von Objekten zum Einsatz. Aus diesen strickte man sich eine dynamische Website zusammen:

  • Application
  • Request
  • Response
  • Server
  • Session
  • ASPError

ASP.NET: von den Active Server Pages zum Framework

Mit ASP.NET wurde um das Jahr 2003 der Nachfolger des klassischen ASP vorgestellt. Anstatt einer losen Sammlung von Objekten kam das .NET Framework als Unterbau zum Einsatz. Dieses abstrahierte häufig benötigte Abläufe wie die Authentifizierung und Autorisierung von Benutzern und den Datenbankzugriff. In seiner Gesamtheit ist ASP.NET in etwa vergleichbar mit Java-Frameworks wie „Struts“ oder „Spring“.

Als ausschlaggebendes Feature enthielt ASP.NET die „Web Forms“. Der Web-Forms-Ansatz erlaubte erfahrenen Windows-Entwicklern, dynamische Webseiten zu programmieren. Dabei wurden die dem Web zugrunde liegenden Mechanismen vor den Entwicklern verborgen; diese konnten weiterhin auf ihnen vertraute Workflows und Entwicklungsumgebungen zurückgreifen. Insbesondere kamen Microsoft-spezifische visuelle Tools zur schnellen Anwendungsentwicklung („Rapid Application Development“, RAD) zum Einsatz.

Die Web Forms ermöglichten Windows-Entwicklern einen schnellen Einstieg in die Webprogrammierung. Gleichzeitig begrenzte der Ansatz jedoch das Maß an Kontrolle über die ausgelieferten HTML-Seiten. Mit ASP.NET MVC kam bald ein alternatives Entwicklungsmodell hinzu. Dieses folgte dem etablierten Muster „Model View Controller“ (MVC) und erlaubte eine sauberere Trennung der Belange („Separation of concerns“). Angelehnt an das wegweisende Framework „Ruby on Rails“ bot ASP.NET MVC Funktionalität zum „Scaffolding“ (in etwa: Gerüstbau) eines Projekts.

Inzwischen wurde ASP.NET durch die Weiterentwicklung „ASP.NET Core“ ersetzt. Im Sprachgebrauch werden beide Namen aber häufig synonym verwendet.

ASP.NET Core: Neuentwicklung auf Basis von Open Source

Mit der Veröffentlichung von ASP.NET Core vollzog sich ein Wandel in der Organisation des Frameworks. Im Zuge der fortschreitenden Öffnung Microsofts wurde die Entwicklung von ASP.NET Core unter die Schirmherrschaft der .NET Foundation gestellt. Der Quelltext des Projekts liegt unter einer Open-Source-Lizenz vor.

Auf technischer Ebene handelt es sich bei ASP.NET Core um ein Re-Design von ASP.NET 4.0. Die organisch gewachsenen Komponenten von ASP.NET wurden zusammengeführt. Die Entwicklung von ASP.NET-Core-Projekten und das Hosting außerhalb des Windows-Ökosystems wurde ermöglicht. Unter Windows setzt ASP.NET Core auf dem .NET Framework auf; auf anderen Betriebssystemen kommt stattdessen das .NET Core Framework zum Tragen.

Im Einklang mit der fortschreitenden Entwicklung der Webtechnologie ist ASP.NET Core bereit für die Cloud. Als ASP.NET-Hosting-Umgebung kommen neben Microsofts traditionellem Internet Information Server (IIS) offene Server-Umgebungen sowie Container zum Einsatz. Das Framework unterstützt klientenseitigen Code und moderne Ansätze der reaktiven Programmierung. Damit zieht ASP.NET Core gleich mit JavaScript-basierten Frameworks wie React.

Für welche Projekte eignet sich ASP.NET?

Mit dem ASP.NET Framework lassen sich Webprojekte aller Couleur realisieren. Insbesondere gehören dazu dynamische Websites und Webanwendungen, inklusive „Single Page Apps“ (SPA). Ferner lasen sich webbasierte Dienste wie APIs und Systeme für Echtzeitkommunikation umsetzen. Für die verschiedenen Einsatzzwecke kamen im Laufe der Jahre verschiedene Ansätze zum Tragen. Wir gehen im Folgenden auf diese ein und geben einen Überblick über die historische Entwicklung.

Programmiermodelle in ASP.NET

Mit dem Fortschritt der Webtechnologien seit den 2000er Jahren wurden immer neue Ansätze zur Webentwicklung in ASP.NET integriert. Sie können sich diese wie einen wohlsortierten Werkzeugkasten vorstellen: Für verschiedenartige Projekte stehen unterschiedliche Werkzeuge zur Verfügung. Je nach Anforderung lassen sich mehrere Ansätze innerhalb eines Projekts kombinieren. Mit dem Erscheinen von ASP.NET Core wurden die zahlreichen, organisch gewachsenen Programmiermodelle zusammengeführt. Dies führte zu einer Vereinfachung bei der Wahl der geeigneten Ansätze.

ASP.NET Web Forms

Mit den klassischen Web Forms werden Seiten aus vordefinierten Komponenten zusammengefügt. Dabei kommt ein visueller Formular-Baukasten zum Einsatz; einzelne Komponenten werden per Drag-and-Drop positioniert. Besonders attraktiv war dies für Entwickler mit Erfahrung in der Windows-Programmierung. Sie konnten die ihnen vertrauten Werkzeuge für „Rapid Application Development“ („schnelle Anwendungsentwicklung“, RAD) nutzen. Mit dem Unterschied, dass als Endprodukt keine Windows-Applikation, sondern eine dynamische Website erzeugt wurde.

Der Web-Forms-Ansatz beruht auf Microsofts Code-Behind-Modell. Dieses erzwingt eine Trennung der Belange:

  • Template-Dateien mit der Endung .aspx definieren die HTML-Struktur einer Seite und enthalten Platzhalter für dynamisch erzeugte Inhalte.
  • Die eigentliche Anwendungs-Logik wird in eine separate Datei mit der Endung .aspx.cs bzw. .aspx.vb ausgelagert. Hierbei handelt es sich um die namensgebende Code-Behind-Datei.
  • Der Client ruft die unter einer URL verfügbare .aspx-Datei ab. Auf dem Server werden die statischen und dynamischen Bestandteile kombiniert. Das daraus resultierende HTML-Dokument wird an den Client ausgeliefert.
  • Bei Benutzereingaben auf der Seite werden die Daten per GET- oder POST-Request an dieselbe URL übertragen und von der Code-Behind-Datei verarbeitet.

Für die Implementierung der Anwendungs-Logik kommt ein objektorientierter Ansatz zum Tragen: Die Code-Behind-Datei definiert eine abgeleitete Klasse. Als Programmiersprache kommt für gewöhnlich C# oder Visual Basic zum Einsatz. Interessant ist, dass die Code-Behind-Datei einmalig vorkompiliert wird. Dies führt zu einer schnelleren Ausführung und höherer Robustheit gegenüber Fehlern während des Aufrufs der Seite.

ASP.NET MVC

Im Gegensatz zum ursprünglichen ASP waren die Web Forms ein richtiger Schritt in Richtung Trennung der Belange. Bei ASP lagen statisches HTML und Code-Bestandteile in ein und derselben Datei vermischt vor. Mit den Web Forms erfolgte die Trennung in Template- und Code-Behind-Datei. Mit ASP.NET MVC erhielt ASP.NET ein weiteres Programmiermodell, das die Webentwicklung nach dem Muster Model View Controller (MVC) erlaubte.

Das MVC-Muster grenzt Anwendungs-Logik („Model“), Darstellungs-Template („View“) und Nutzerinteraktion („Controller“) voneinander ab. Zu den Vorteilen des MVC-Ansatzes zählt, dass sich die einzelnen Belange besser testen lassen. Ferner erlaubt die Trennung der Belange, verschiedene Controller zu nutzen. Anstatt sämtliche Benutzereingaben an eine einzelne URL zu senden und dabei die Seite neu zu laden, kommt beispielsweise AJAX via jQuery zum Einsatz. Dies erlaubt das Neuladen von Teilen der Seite. Mit ASP.NET Core MVC setzt sich die Tradition von ASP.NET MVC bis in die heutige Version des Frameworks fort.

ASP.NET Web Pages

Die ASP.NET Web Forms und ASP.NET MVC sind gut geeignet, um komplexe Websites zu realisieren. Benötigt man mehrere Seiten mit wiederverwendbaren Komponenten, bieten sich beide Programmiermodelle an. Was jedoch, wenn man dies nicht benötigt? Nehmen wir an, wir möchten eine simple Website bauen, die nur aus einer einzigen Seite oder einer Handvoll Seiten besteht. Es gibt ein paar dynamische Bestandteile, aber der Fokus liegt eher auf einem ausgefeilten Layout als komplexer Anwendungs-Logik und der Verarbeitung von Nutzereingaben. Dann wäre es Overkill, eigene Klassen zu definieren oder eine Aufspaltung nach dem MVC-Muster anzustreben.

Für Fälle, in denen weniger die Anwendungs-Logik im Vordergrund steht als ausgefeiltes Layout und Design, bieten sich die ASP.NET Web Pages an. Ähnlich dem klassischen ASP oder PHP findet innerhalb einer Datei eine Kombination aus statischen HTML-Strukturen und dynamischen Code-Bestandteilen statt. Dabei kommt eine spezielle Syntax zum Einsatz. Besonders gut eignen sich ASP.NET Web Pages für die Erstellung von Landingpages.

ASP.NET Web API

Die bisher vorgestellten Programmiermodelle haben allesamt zum Ziel, für den menschlichen Nutzer bestimmte HTML-Inhalte zu erzeugen. Darüber hinaus enthält das ASP.NET Framework jedoch auch Modelle, die dazu dienen, Infrastruktur für Webprojekte bereitzustellen. Bei ASP.NET Web API handelt es sich um ein Programmiermodell zur Erstellung von REST-APIs. Zugriffe auf die Endpoints der API finden über AJAX statt. Dabei kommt JSON oder XML als Format für Datenübertragung zum Einsatz.

ASP.NET WebHooks

Bei ASP.NET WebHooks handelt es sich um eine Implementierung des WebHooks-Musters. WebHooks erlauben das Veröffentlichen und Abonnieren von Ereignissen, die in einem System stattfinden. Dabei kann es sich z. B. um das Hinzufügen einer Datei oder den Empfang einer Zahlung handeln. Ein Abonnent registriert die zu verfolgende Änderung beim veröffentlichenden System. Dazu übergibt er eine URL – den namensgebenden WebHook. Tritt das registrierte Ereignis auf, ruft das veröffentlichende System den WebHook auf; der Abonnent wird über das Ereignis informiert.

SignalR

Bei SignalR handelt es sich um ein Framework zur Echtzeit-Kommunikation zwischen Client und Server. Das Framework baut auf dem WebSockets-Standard auf und erlaubt den bidirektionalen Transfer von Daten. Browser, die WebSockets nicht beherrschen, werden über Fallback-Mechanismen unterstützt. SignalR kommt häufig zum Einsatz, um browserbasierte Chat-Dienste und Videokonferenz-Software zu realisieren.

Neue Programmiermodelle in ASP.NET Core

Bei ASP.NET Core handelt es sich um den Nachfolger von ASP.NET. Das ASP.NET Core Framework wurde neu geschrieben, weist jedoch eine hohe Kompatibilität zum Vorgänger auf. Vormals separate Bestandteile von ASP.NET wurden in der Core-Version zusammengeführt. Ferner wurden manche Komponenten neu entwickelt und behielten ihren bestehenden Namen bei. So existiert das SignalR Framework sowohl in einer ASP.NET- als auch ASP.NET-Core-Version. Schauen wir uns die wichtigsten Neuentwicklungen von ASP.NET Core an.

ASP.NET Core MVC – API-getriebene Model View Controller Sites

Mit ASP.NET Core MVC wurden Funktionalitäten von ASP.NET MVC und ASP.NET Web API vereint. So lassen sich hochdynamische Webanwendungen mit modularer Benutzeroberfläche und dahinterliegender API entwickeln. Dabei kommt als gemeinsamer Unterbau das .NET Core Framework zum Tragen. Vertraute Ansätze aus der .NET-API-Entwicklung lassen sich auf die MVC-Entwicklung übertragen und vice versa.

Razor Pages – Weiterentwicklung der ASP.NET Web Pages

Die Razor Pages füllen eine ähnliche Nische wie vormals die ASP.NET Web Pages. Der Einsatz bietet sich dann an, wenn das Model-View-Controller Muster unnötigen Overhead darstellen würde. Möchte man z. B. eine Landingpage bauen, lässt sich diese als Razor Page mit geringem Aufwand implementieren. Zum Erstellen des Seiten-Templates kommt die Razor-Syntax zum Einsatz. Als Programmiersprachen lassen sich, wie im .NET-Universum üblich, C# und Visual Basic nutzen.

Schauen wir uns eine beispielhafte Razor Page an. Auffällig ist, dass anstelle der ansonsten in Template-Sprachen üblichen öffnenden und schließenden Code-Tags ein öffnendes @-Zeichen zum Einsatz kommt:

@page
@model HelloWorldModel
 
@if (Name != null) {
    <p>Hello dear @Name</p>
}
<form method="post">
    <p>
        <label asp-for="Name"></label>
        <input class="form-control" asp-for="Name" />        
    </p>
    <input type="submit" value="Say Hello" />
</form>

Reaktive Programmierung mit Blazor – „.NET in the browser“

Das Blazor Framework setzt auf die bereits erwähnte Razor-Syntax; in der Tat steht Blazor für „Browser + Razor“. Wie der Name andeutet, liegt der Fokus von Blazor auf dem Browser als Laufzeitumgebung. Bei den Razor Pages findet die Verarbeitung der Nutzer-Interaktion auf dem Server statt. Blazor hingegen ermöglicht die reaktive Programmierung, bei der einzelne Seitenkomponenten im Browser dynamisch auf Änderungen reagieren. Damit ist Blazor in etwa vergleichbar mit den Technologien React, Angular und Vue.

Hier ein simples Beispiel für reaktive Programmierung mit Blazor. Wir binden den Wert eines Eingabefelds an die Variable Name. Dabei kommt die Razor-Syntax zum Einsatz:

@page "/"
<h1>A Blazor example</h1>
<p>Welcome to Blazor, @Name.</p>
<input bind="@Name" type="text" class="form-control" placeholder="Name" />

Neben der reaktiven Programmierung ist ein weiteres Merkmal von Blazor hochinteressant: Per WebAssembly lassen sich die die .NET-Sprachen für die Ausführung im Browser kompilieren. Blazor wird daher manchmal auch als Ansatz für „.NET in the browser“ bezeichnet. Der Vorteil liegt darin, kein JavaScript für den klientenseitigen Code schreiben zu müssen. Stattdessen erfolgt die Entwicklung in C# oder Visual Basic; der Code kann auf die vertrauten Komponenten des .NET Frameworks zugreifen.

Welche Vor- und Nachteile bietet ASP.NET?

Mit ASP.NET bzw. ASP.NET Core steht eine ausgereifte Umgebung für die Entwicklung unterschiedlichster Webprojekte zur Verfügung. Zum Umfang gehören Programmiersprachen, Code-Editoren und IDEs sowie Entwicklungstools und ein florierendes Ökosystem frei verfügbarer Pakete. Heutzutage kommen dabei moderne Methoden wie reaktive Programmierung, WebSockets und WebAssembly zum Einsatz. Der größte Nachteil bei der Nutzung von ASP.NET war traditionell die enge Bindung an Microsoft und der damit einhergehende Vendor Lock-in. Mit der fortschreitenden Öffnung hin zu Open Source ist dies mittlerweile weniger bedenklich.

Was sind die Vorteile von ASP.NET?

Den größten Vorteil bei der Nutzung von ASP.NET ziehen Entwickler, die mit der Programmierung im Microsoft-Ökosystem vertraut sind. Diese greifen komfortabel auf die ihnen bekannten Sprachen, Tools und Workflows zurück. Als Unterbau von ASP.NET kommt das ausgereifte .NET Framework zum Einsatz. Damit stehen passende Komponenten für eine große Vielzahl von Anwendungsfällen bereit. Ein großer Vorteil, wenn es darum geht, komplexe Anwendungen schnell und ergebnissicher umzusetzen.

Das .NET Framework ist modular aufgebaut und enthält die „Common Language Runtime“ (CLR) als Laufzeitumgebung. Diese erlaubt die Nutzung verschiedener Programmiersprachen, solange diese dem „Common Language Infrastructure“ (CLI) Standard entsprechen. Zu den von Microsoft entwickelten CLI-Sprachen gehört neben den objektorientierten Klassikern C# und Visual Basic die neuere funktionale Sprache F#. Per Blazor und WebAssembly lassen sich die CLI-Sprachen als klientenseitiger Code im Browser ausführen.

Ursprünglich begann ASP.NET als proprietäre Software unter der Kontrolle von Microsoft. Heutzutage handelt es sich um ein Open-Source-Projekt unter Schirmherrschaft der .NET Foundation. Im Zuge dieser Öffnung wurden der NuGet Paketmanager und das dazugehörige öffentliche Paket-Repository etabliert. Vergleichbar mit NPM oder RubyGems steht ASP.NET-Entwicklern damit ein Ökosystem frei nutzbarer Pakete zu Verfügung.

Was sind die Nachteile von ASP.NET?

Der größte Vorteil von ASP.NET – die Nutzung des Microsoft-spezifisches Ökosystems – ist gleichzeitig auch der größte Nachteil der Technologie. Denn die Webentwicklung baut ansonsten größtenteils auf freien und offenen Plattformen, Sprachen und Formaten auf. Entwicklern, die das erste Mal in das .NET-Universum eintauchen, bietet sich eine verwirrende Vielfalt an Versionen und Programmiermodellen.

Wer mit dem ASP.NET Framework entwickeln wollte, konnte dies traditionell nur unter Windows tun. Seit Jahren betreibt Microsoft eine konzertierte Öffnung hin zu breit eingesetzten Standards und Open Source. Mit dem Erscheinen von ASP.NET Core klappt die Entwicklung nun auch auf den drei großen Betriebssystem-Familien Windows, macOS und Linux. Ferner ist es somit möglich, die Entwicklungsumgebung in einem Docker-Container vorzuhalten.

Klassisches ASP.NET ließ sich nur auf Microsofts hauseigener Servertechnologie Internet Information Server (IIS) hosten. Ein großer Nachteil gegenüber anderen Webframeworks, die allesamt auch auf Linux laufen. ASP.NET-Hosting bedingt spezielle Anforderungen und ist nicht bei allen Providern verfügbar. Zwar war es möglich, mit „Mono“ als freier .NET-Implementierung andere Webserver einzusetzen. Der echte Wandel stellte sich jedoch erst mit dem Erscheinen von .NET Core und dem „Open Web Interface for .NET“ (OWIN) ein. OWIN entkoppelt eine ASP.NET-Anwendung vom darunterliegenden Webserver. Damit ist eine der größten Hürden beim Einsatz von ASP.NET gefallen.

Welche Anforderungen an die APS.NET-Hosting-Umgebung müssen erfüllt sein?

Das ASP.NET Framework ist speziell in Bezug auf die Hosting-Umgebung. Sonstige Webframeworks auf Basis der Sprachen PHP, Java, Python oder JavaScript laufen allesamt auf Linux-Servern. Nur zum Hosting von ASP.NET-Anwendungen war traditionell Windows als Server-Betriebssystem erforderlich. Ferner kam zwingend Microsofts Webserver Internet Information Services (IIS) zum Einsatz. Zum Hosten einer ASP.NET-Anwendung auf Windows-Servern sollte Managed Windows Hosting gewählt werden. Bei diesem Hosting-Modell werden die Server ständig vom Anbieter gewartet und mit Software-Updates versorgt.

Weitaus entspannter ist es um das Hosting von ASP.NET-Core-Anwendungen bestellt. Diese lassen sich neben IIS auf einer Vielzahl von Serverumgebungen hosten. Dabei kommt der integrierte Kestrel-Webserver zum Einsatz, der auf Windows, Linux und macOS läuft. Beliebte Webserver wie Nginx und Apache lassen sich als Reverse Proxy konfiguriert zusammen mit Kestrel einsetzen. Unter Windows steht ferner die Kestrel-Alternative HTTP.sys zur Verfügung.

Tipp

Nutzen Sie das ASP.NET Hosting von IONOS – schon ab 1 Euro pro Monat zu haben!