ASP.NET
# ASP.NET

ASP.NET (Active Server Pages .NET) ist ein Web Application Framework von Microsoft, mit dem sich dynamische Webseiten, Webanwendungen und Webservices entwickeln lassen. ASP.NET ist Nachfolger von Active Server Pages (ASP) und erschien 2002 in der ersten Version. ASP.NET ist Teil des klassischen .NET Frameworks bis zur aktuellen Version 4.8. Parallel gibt es seit 2015 ASP.NET Core, ein quelloffenes separates Framework, das auch offiziell GNU/Linux und macOS unterstützt. In .NET 5.0, das auf der .NET-Core-Technologie basiert, entfallen Teile des bisherigen ASP.NET (ASP.NET Webforms, ASP.NET Webservices).

ASP.NET kommt auf ca. 7,6 % aller Websites als serverseitige Programmiersprache zum Einsatz und liegt damit nach PHP (77,4 %) und vor dem drittplatzierten Ruby (5,7 %) auf dem zweiten Platz der am häufigsten verwendeten serverseitigen Sprachen zum Erstellen von Webseiten (Stand: 11. Oktober 2022).

## ASP.NET

### Überblick

ASP.NET gehört zum .NET Framework und stellt eine Methode dar, um .NET-Anwendungen in IIS oder anderen mit ASP.NET kompatiblen Webservern zu verwalten („hosting“). ASP.NET stellt hierbei Klassen zur Verfügung, die allen Webanwendungen gemeinsam sind, wie etwa die Authentifizierung und Autorisierung von Benutzern. Das wichtigste Element ist hierbei die HTTP-Laufzeitumgebung, die HTTP-Anfragen bearbeitet.

Mit ASP.NET können Webanwendungen in von .NET unterstützten Sprachen (theoretisch alle CLR-kompatiblen Sprachen) erstellt werden, gebräuchlich sind nahezu ausschließlich objektorientierte Sprachen wie C# und VB.NET. Eingeschränkt wird die Sprachwahl meistens nur von der jeweiligen Entwicklungsumgebung. ASP.NET ist somit keine Programmiersprache, sondern eine Bündelung von Techniken. ASP.NET-Sprachen werden nicht interpretiert, sondern in CIL übersetzt und kompiliert.

Auf die ASP.NET-Plattform setzen die jeweiligen Verfahren, wie ASP.NET WebForms, ASP.NET AJAX, ASP.NET MVC, ASP.NET Dynamic Data, ASP.NET WebAPI und ASP.NET SignalR auf, welche jeweils als HTTP-Handler implementiert sind.

### ASP.NET Web Forms

Die Web Forms bilden den Grundbaustein der Entwicklung von Webinhalten mit ASP.NET in seiner klassischen Form. Web Forms sind in Dateien mit der Dateiendung .aspx enthalten. Die ASPX-Dateien enthalten typischerweise statisches (X)HTML Markup sowie die „Web Controls“ und „User Controls“, die gemäß der serverseitig hinterlegten Logik auf dem Webserver verarbeitet und als dynamischer (X)HTML-Code ausgegeben werden. Beispiele für Web Controls, die Microsoft standardmäßig mitliefert, sind ein Kalendercontrol oder die Gridview (Tabellenansicht von Daten).

Zusätzlich können dynamische Code-Inhalte, die vom Server ausgeführt werden sollen, innerhalb einer ASPX-Datei in der Form <% -- dynamic code -- %> hinterlegt werden. Diese Art der Einbettung ähnelt stark den Konstrukten anderer Web-Programmiersprachen wie PHP, JSP und ASP. Allerdings sollte der Entwickler möglichst auf im HTML-Code verschachtelten Programmcode verzichten, da der Compiler diesen Code erst bei Ausführung auf dem Webserver überprüft. Der Code separat verfasster “Code-Behind”-Dateien (siehe unten) wird dagegen vom Compiler vollständig überprüft, was eine höhere Laufzeitsicherheit erzielt.

Mit dem ASP.NET-Framework 2.0 veröffentlichte Microsoft den neuartigen Ansatz des “Code-Behind”-Modells. Dabei verbleiben statische Inhalte in der ASPX-Datei, während der dynamische Code in eine Datei des Typs .aspx.vb oder .aspx.cs respektive .aspx.fs ausgelagert wird. Der Dateityp ist dabei von der verwendeten .NET-Sprache abhängig. Entwickler, die nicht mit dem „Code-Behind“-Ansatz arbeiten möchten, können die Funktion Render überschreiben und sich hier (vollkommen unabhängig von der Design-Ansicht) HTML selbst erzeugen.

**Code-Behind-Modell**

Microsoft empfiehlt die Nutzung des „Code-Behind“-Ansatzes für die dynamischen Code-Anteile. Die „Code-Behind“-Dateien tragen üblicherweise die Dateiendung .aspx.cs oder .aspx.vb. Der Dateiname der ASPX-Datei entspricht dabei stets genau dem Namen der „Code-Behind“-Datei, unterschiedlich sind nur die Dateinamenserweiterungen. Microsoft Visual Studio und andere IDEs geben diese Art der Entwicklung standardmäßig vor. Der Code einer solchen „Code-Behind“-Datei wird bereits vor Aufruf der entsprechenden Seite kompiliert. Dies senkt die Fehlerrate gegenüber Skriptsprachen, bei denen die Überprüfung auf Fehler erst zur Laufzeit stattfindet. In der „Code-Behind“-Datei hat der Entwickler die Möglichkeit, auf unterschiedlichste Ereignisse („events“) im Lebenszyklus einer ASP-Web-Forms-Web-Seite zu reagieren, darunter nicht nur z. B. das Laden der Webseite, sondern auch Ereignisse, die sich aus Benutzerinteraktionen mit Web-Formular-Inhalten ergeben, so etwa der Klick auf eine Schaltfläche.

Das Programmmodell (mit Events, die von Controls ausgelöst werden) ist dem von .NET-Applikationen sehr ähnlich, somit ist für Entwickler, die schon Applikationen für das .NET Framework geschrieben haben, die Nutzung von ASP.NET (und C#/VB.NET) leicht möglich. Meist können für Windows-Applikationen programmierte Funktionen oder Klassen sogar ohne Änderung in ASP.NET weiterverwendet werden.

Mit diesem Ansatz unterscheidet sich ASP.NET deutlich vom klassischen ASP. Eine erste Trennung von Code zur Darstellung und den Inhalten wird dadurch erreicht. Ähnlich der Trennung zwischen „View“ und „Controller“ im MVC-Muster erlaubt diese Trennung eine bessere arbeitsteilige Entwicklung zum Beispiel durch eine Aufteilung zwischen Webdesigner, der die ASPX-Datei bearbeitet, und Programmierer, der die „Code-Behind“-Datei erstellt. Die neuere Komponente ASP.NET MVC betont konzeptionell in noch viel stärkerer Form diese Art des Separation of Concerns.

**Directives**

Mit Directives ist es möglich, in einer ASPX-Datei zu deklarieren, wie ASP.NET diese Seite verarbeiten soll. Die am häufigsten genutzte Directive ist <%@ Page %>. Hiermit lassen sich diverse Einstellungen vornehmen, allen voran die Angabe, in welcher Programmiersprache der dynamische Inhalt programmiert ist. Beispielsweise enthält das Code-Beispiel in diesem Artikel die <%@ Page %> Directive in der ersten Zeile.

**User Controls**

User Controls kapseln bestimmte Abschnitte aus Seiten in einer eigenen Datei mit der Endung .ascx. Diese ASCX-Dateien werden innerhalb des ASP.NET-Projekts registriert und können auf ASPX-Seiten genauso verwendet werden wie die vordefinierten „Web Controls“. Die ASCX-Dateien enthalten typischerweise (X)HTML-Code sowie serverseitige Controls. Ein „User Control“ wird kompiliert, wenn die Seite, auf der das Control eingebunden wird, aufgerufen wird. Das „User Control“ wird für mögliche nachfolgende Anfragen im Speicher gehalten. „User Controls“ bringen ihre eigenen Ereignisse („events“) mit, die ebenfalls vom Entwickler individuell behandelt werden können. Alle „User Controls“ sind daran gebunden, von einer ASPX-Seite aufgerufen zu werden. Der direkte Aufruf eines „User Controls“ im Webbrowser ist nicht möglich.

**Individualisierte Controls**

Programmierer können selbstdefinierte Controls („Custom Controls“) in ihren ASP.NET-Webanwendungen definieren. Im Gegensatz zu „User Controls“ werden „Custom Controls“ nicht in einer ASCX-Datei definiert, sondern ihr Code wird in eine DLL-Datei kompiliert. Hat er solche „Custom Controls“ einmal definiert, kann der Entwickler diese in unterschiedlichen Webanwendungen und Visual Studio-Projekten nutzen.

Diese Möglichkeiten, eigene Controls für ASP.NET zu entwickeln, bilden die Grundlage für eine Vielzahl an Controls von Drittanbietern, die frei oder kostenpflichtig zur Verfügung stehen. Es existiert ein mittlerweile sehr umfangreicher Markt, über den eine Vielzahl von wiederverwendbaren Controls frei oder kommerziell erhältlich sind. Komplexe Anforderungen brauchen daher häufig nicht selbst entwickelt zu werden.

**View State**

ASP.NET unterstützt mit der ViewState-Technik eine erweiterte Möglichkeit, Speicherinhalte zwischen einzelnen Seitenaufrufen zu erhalten. Während mit der Session-State-Technik bei Active-Server-Pages bisher nur eine von den Seitenaufrufen losgelöste Speicherverwaltung existierte, hat der Entwickler bei ASP.NET die Möglichkeit, Speicherinhalte in einer ViewState-Collection abzulegen, um beim nächsten Seitenaufruf darauf zuzugreifen. Im Gegensatz zum Session-State wird der ViewState nicht auf dem Server, sondern in der zurückgegebenen Seite gespeichert.

Mit der von ASP.NET unterstützten ViewState-Technik behalten Controls ihren Status auch über aufeinander folgende Seitenaufrufe hinweg. Das nimmt Entwicklern die Arbeit ab, dies selbst umzusetzen. Ein ähnliches Konzept verfolgt Sun mit den JavaServer Faces (JSF).

**Code-Beispiel**

* ASPX-Datei

Der nachfolgende Beispielcode erzeugt bei Ausführung auf dem mitgelieferten Webserver von Visual Studio eine grundlegende Ausgabe am Bildschirm; diese folgt den Standardinhalten, die Visual Studio beim Anlegen einer neuen ASPX-Seite (in ASP.NET 4) generiert.

* Code-Behind-Datei

Zum gezeigten ASP-Code gehört der nachfolgend gezeigte Quellcode, der in der „Code-Behind“-Datei gespeichert ist. In diesem Fall kommt die Programmiersprache C# zum Einsatz, VB.NET ist dazu – wie beschrieben – eine gängige Alternative.

* Autogenerierte .designer.cs-Datei

Ebenfalls anhand der ASPX-Vorlage wird eine Datei namens Default.aspx.designer.cs erzeugt. Da der Programmierer diese Datei nicht ändern soll (weil seine Änderungen bei der nächsten Generierung überschrieben würden), ist deren Quelltext hier nicht gezeigt.

### Andere Bestandteile

* ASP.NET bietet das Konzept der Webparts. Mit diesen können Intranets erstellt werden, in denen jeder Benutzer selbst konfiguriert, was er an welcher Stelle der Seite sehen will.
* ASP.NET AJAX ist ein Teil von ASP.NET, mit dem sich Ajax-Webseiten unter ASP.NET entwickeln lassen. Er umfasst Klassenbibliotheken und Steuerelemente.
* ASP.NET Webservices ist ein Teil-Framework zum Entwickeln von Webservices auf Basis der Standards SOAP, WSDL und XSD. Es erschien erstmals als Teil von .NET Framework 2.0. Entsprechend der Dateinamenserweiterung von solchen Webservices wird ASP.NET Webservices auch als ASMX bezeichnet.
* ASP.NET Web Pages sind eine Alternative zu Web Forms und MVC.
* ASP.NET MVC ist ebenfalls eine Alternative zu Web Forms und Web Pages.
* ASP.NET Web API
* ASP.NET SignalR
* ASP.NET Dynamic Data ist ein auf Web Forms basierendes Framework zur Erstellung von Webanwendungen, das zur Laufzeit automatisch das zugrunde liegende Datenmodell ermittelt und basierend darauf das Verhalten der Benutzeroberfläche festlegt. Es ist nur ein verhältnismäßig geringer Programmieraufwand erforderlich.

### SOAP Extensions

Das ASP.NET SOAP Extension Framework ermöglicht es ASP.NET-Komponenten, SOAP-Nachrichten zu verarbeiten. Für die Erstellung von und die Verbindung mit SOAP-Webservices empfiehlt sich jedoch der Einsatz der Windows Communication Foundation (WCF).

## ASP.NET Core

Mit der Entwicklung von .NET Core wurde auch ASP.NET grundlegend überarbeitet. So kann man damit auch Web-Anwendungen für die (von .NET Core unterstützten) Nicht-Windows-Plattformen entwickeln. Das neue Framework heißt seit Januar 2016 ASP.NET Core (zeitweilig auch ASP.NET 5). Im Unterschied zu ASP.NET wird ASP.NET Core als Open-Source-Projekt entwickelt. Bis zur Version 2.2 konnte man ASP.NET Core noch zusammen mit neueren Versionen des klassischen .NET Framework verwenden, ab 3.0 jedoch nur noch mit dem neuen, modularen Framework .NET Core. Ebenso sind Anwendungen, die mit ASP.NET entwickelt wurden, nur zum klassischen .NET Framework kompatibel.

ASP.NET Core enthält die Frameworks ASP.NET MVC und ASP.NET Web Pages. ASP.NET Web Api wird in das MVC-Framework integriert. Web Forms wurde letztmals mit der .NET Version 4.8 unterstützt und wird nicht mehr auf .NET Core portiert.

Ab der Version 2 gibt es die Möglichkeit das MVC-Pattern mit Hilfe sogenannter "Razor Pages" zu vereinfachen. Dieser Ansatz stellt die von Microsoft empfohlene Vorgehensweise dar.

Mit der Version 2.1 wurde im Mai 2018 neben zahlreichen kleineren Verbesserungen auch das Signal.R Framework (siehe unten) in einer ASP.NET Core Version bereitgestellt (ASP.NET Core SignalR).

Mit der Version 3 wurde ein neues Framework namens Server-side Blazor hinzugefügt, das die Entwicklung interaktiver Weboberflächen mit C# (ohne notwendige JavaScript-Programmierung) unterstützt. Zur Kommunikation wird das auf Websockets basierende Signal.R verwendet. Damit kann ein Blazor-Server auch asynchron Nachrichten an den Client (Browser) übergeben, um in den HTML-Seiten dargestellte Inhalte zeitnah und ohne Benutzerinteraktion zu aktualisieren. Während der Entwicklung des Frameworks wurde auch zeitweise der Name Razor Components verwendet. Daneben gibt es seit Mai 2019 auch die Variante Blazor Webassembly, bei der die Weboberfläche und C# Code mit Hilfe von WebAssembly direkt im Browser ausgeführt wird. Dies geschieht wahlweise Standalone oder mit Unterstützung durch einen ASP.NET Core Server. Optional kann die Webanwendung auch als Progressive Web App (PWA) installiert werden und somit ohne Browser laufen.

## Andere Bestandteile und Ergänzungen

Die folgende Frameworks gibt es sowohl für ASP.NET 5 als auch für frühere Versionen.

### ASP.NET MVC

Das ASP.NET MVC ist eine Implementierung des MVC-Patterns und erlaubt es, dynamische Webseiten besonders klar in die drei Bereiche Model (Datenmodell), View (Ansicht) und Controller (Steuerung) zu gliedern. Dies wird durch die zugrundeliegende Architektur eingefordert und ermöglicht klares Separation of Concerns. MVC unterstützt darüber hinaus auch in besonderer Weise den Ansatz der testgetriebenen Entwicklung, da mit ASP.NET MVC für die Unit Tests kein Webserver benötigt wird (im Gegensatz zur Situation bei WebForms).

Ursprünglich wurde ASP.NET MVC als Erweiterungsmodul für Webbrowser („Plugin“) ausgeführt, welches auf WebForms aufsetzt. Mittlerweile ist ASP.NET MVC jedoch ein fester Bestandteil des ASP.NET Frameworks und von WebForms unabhängig.

### ASP.NET Web API

ASP.NET Web API ermöglicht es, REST-Web-Dienste zu implementieren. Daten werden hierbei in Form von JSON, XML oder OData übertragen. Ein JavaScript-Skript auf einer Webseite kann mit Hilfe von Ajax oder AJAJ auf diese Services zugreifen und damit Daten im Hintergrund übertragen. Dies ermöglicht die Erstellung von hochdynamischen Rich-Client-Webseiten.

Ab der Version ASP.NET Core 1.0 gehört Web API mit zum Framework ASP.NET MVC.

### ASP.NET SignalR

ASP.NET SignalR überträgt Daten bidirektional zwischen dem Client und dem Server und basiert auf dem Netzwerkprotokoll WebSockets. Wenn der Browser des Clients WebSockets nicht beherrscht, verwendet SignalR andere Methoden der Datenübertragung (englisch: Fallback). SignalR vereinfacht damit die Implementierungen von Echtzeitanwendungen wie Chat oder Videokonferenzen.

### ASP.NET Web Pages

ASP.NET Web Pages ist ein Framework zum Erstellen dynamischer Webseiten. Zum Erstellen von solchen Seiten lässt sich das Tool Microsoft WebMatrix verwenden. Razor ist eine Syntax der Programmiersprachen C# und Visual Basic .NET, die beim Erstellen von Web Pages angewandt wird.

### ASP.NET WebHooks

ASP.NET WebHooks ist ein quelloffenes Framework, das das Verfahren WebHooks implementiert und auf ASP.NET Web API basiert. Es erleichtert den Konsum von Ereignissen von Webservices.

## Versionsgeschichte

ASP.NET trat 2002 mit der ersten Version die Nachfolge des in die Jahre gekommenen ASP (Active Server Pages) an, hat aber heute außer dem Namen nicht mehr viel mit der alten Technologie zu tun. ASP.NET ist seit 2002 in der Version 1.0 „final“. Seit 28. Oktober 2005 gibt es die fertige Version von ASP.NET 2.0. Mit ASP.NET 2.0 wird wesentlich weniger Code (laut Microsoft bis zu 70 Prozent) benötigt, um eine dynamische Web-Site zu erstellen. Mit Version 3.5 wurde ASP.NET um Unterstützung für Ajax und LINQ erweitert. Die Version 4.5 erschien zeitgleich mit der Version des .NET Frameworks am 15. August 2012.

| Version | korrespondierende Visual-Studio-Version | Veröffentlichung |
| - | - | - |
| Ältere Version; nicht mehr unterstützt: 1.0 | Microsoft Visual Studio .NET | Januar 2002 |
| Ältere Version; nicht mehr unterstützt: 1.1 | Microsoft Visual Studio .NET 2003 | April 2003 |
| Ältere Version; nicht mehr unterstützt: 2.0 | Microsoft Visual Studio 2005 | November 2005 |
| Ältere Version; nicht mehr unterstützt: 3.0 | n/a | November 2006 |
| Ältere Version; nicht mehr unterstützt: 3.5 | Microsoft Visual Studio 2008 | November 2007 |
| Ältere Version; nicht mehr unterstützt: 4.0 | Microsoft Visual Studio 2010 | April 2010 |
| Ältere Version; noch unterstützt: 4.5 | Microsoft Visual Studio 2012 | August 2012 |
| Ältere Version; noch unterstützt: 4.6 | Microsoft Visual Studio 2015 | Juli 2015 |
| Aktuelle Version: 4.7 | Microsoft Visual Studio 2017 | April 2017 |

## Entwicklungsumgebungen

| Tool | unterstützte ASP.NET-Version | Lizenz | Plattform |
| - | - | - | - |
| Microsoft Visual Studio Code | Core 1.0 & 2.0 | open-source | Windows, MacOS, Linux |
| Microsoft Visual Studio 2017 | 2.0, 3.5, 4.0, 4.5, 4.5.1, 4.6, Core 1.0 (ehem. 5), Core 2.0 (ab Version 15.3), MVC 6 | kommerziell | Windows |
| Microsoft Visual Studio 2015 | 2.0, 3.5, 4.0, 4.5, 4.5.1, 4.6, 5 | kommerziell | Windows |
| Microsoft Visual Studio 2013 | 2.0, 3.5, 4.0, 4.5, 4.5.1 | kommerziell | Windows |
| Microsoft Visual Studio 2012 | 2.0, 3.5, 4.0, 4.5 | kommerziell | Windows |
| Microsoft Visual Studio 2010 | 2.0, 3.5, 4.0 | kommerziell | Windows |
| Microsoft Visual Studio 2008 | 2.0, 3.5 | kommerziell | Windows |
| Microsoft Visual Studio 2005 | 2.0 | kommerziell | Windows |
| Microsoft Visual Studio 2017 (Community & Express) | 2.0, 3.5, 4.0, 4.5, 4.5.1, 4.6, Core 1.0 (ehem. 5), Core 2.0 (ab Version 15.3), MVC 6 | kostenlos | Windows |
| Microsoft Visual Studio 2015 (Community & Express) | 2.0, 3.5, 4.0, 4.5, 4.5.1, 4.6, 5 | kostenlos | Windows |
| Microsoft Visual Studio 2013 (Community & Express) | 2.0, 3.5, 4.0, 4.5, 4.5.1 | kostenlos | Windows |
| Visual Web Developer Express 2010 | 4.0 | kostenlos | Windows |
| Visual Web Developer Express 2008 | 2.0, 3.5 | kostenlos | Windows |
| Jetbrains Rider | | kostenlos | Windows |
| Xamarin Studio | | kostenlos | Windows |
| SharpDevelop | 1.1, 2.0, 3.5, 4.0, 4.5 | open-source | Windows |
| MonoDevelop | 1.1, 2.0 | open-source | Windows, hauptsächlich Linux, BSD |
| Embarcadero Delphi | | kommerziell | Windows |
| Borland C# Builder | | kommerziell | Windows |
| Microsoft WebMatrix | | kostenlos | Windows |

Für kleinere Firmen und unabhängige Entwickler stehen seit dem 12. November 2014 kostenlose Community-Editionen von Visual Studio zur Verfügung, die von der Funktionalität den „Professional“-Versionen entsprechen.

Nur noch von historischem Interesse ist das von Microsoft unterstützte Community-Projekt ASP.NET Web Matrix, eine Entwicklungsumgebung für ASP.NET 1.0 und 1.1. Für neuere ASP.NET-Versionen empfiehlt Microsoft stattdessen den Einsatz von Visual Web Developer Express als kostenloser Entwicklungsumgebung oder das für Einsteiger geeignete Microsoft WebMatrix.

## Webserver

* Microsoft Visual Studio .NET und Visual WebDeveloper Express enthalten ab der Version 2005 einen eigenen Webserver, weshalb zum Entwickeln mit diesen Produkten kein IIS mehr benötigt wird.
* Internet Information Services (IIS 5.0/6.0/7.0) ab Windows 2000 (für Windows NT 4 und älter, sowie für Windows 9x gibt es keine Unterstützung). Im Gegensatz zu den IIS der Version 5 ist ASP.NET unter IIS 6 ab Windows Server 2003 direkt implementiert, wodurch deutliche Leistungsverbesserungen erreicht werden konnten. Die IIS sind – in eingeschränkter Form – auch in manchen nichtprofessionellen Versionen von Windows enthalten (Windows XP Professional, Vista ab Edition Home Premium).
* Apache-Webserver Mit den Apache-Modulen mod_aspdotnet und mod_mono kann ASP.NET in den Apache-Webserver eingebunden werden. Diese funktionieren auch unter Linux oder BSD.
* XSP-Webserver (Teil des Mono-Projektes). Dieser Server steht für Windows und Linux zur Verfügung und kann über das Apache-Modul mod_mono an den Apache-Webserver angebunden werden. XSP ist in C# geschrieben, steht unter einer Open-Source-Lizenz und unterstützt ASP.NET 2.0 (ohne Webparts).
* Cassini-Webserver. Dieser Webserver wurde von Microsoft als schlankes Beispielprogramm zur Verfügung gestellt und soll Entwicklern Einblicke in die Funktionsweise des “ASP.NET Hosting” geben. Cassini ist in C# implementiert und steht unter einer Shared-Source-Lizenz.

## Beurteilung

### Vorteile

* Da das .NET Framework selbst viele Funktionen zur Verfügung stellt, sind viele Anforderungen (wie etwa Bildbearbeitung oder XML-Verarbeitung) im Gegensatz zu beispielsweise PHP ohne Installation von zusätzlichen Libraries möglich.
* Durch die Abstraktion der auf einer Webseite verwendeten Funktionalitäten (von Textbox über Buttons bis vollständigen Kalender-Control) in Servercontrols können browserunabhängige Webseiten erstellt werden. Zusätzlich kann mit den CSS Friendly Adaptors auf den generierten HTML-Code (auch browserspezifisch) von Standardcontrols Einfluss genommen werden, so dass diese standardkonformes HTML erzeugen, das etwa keine Tabellen zur Layoutgestaltung verwendet. Durch die Abstraktion kann zum Beispiel eine vollständige Rechteverwaltung (User/Roles) – mitsamt Nutzeranmeldung, „Passwort vergessen“, und Ähnlichem – fast ohne selbstgeschriebenen Code, zumindest aber mit vorgefertigten Klassen in die eigene Seite implementiert werden. Auch ein Schutz von Dateien kann damit implementiert werden.

### Nachteile

* Mit ASP.NET ist man bisher an einen unter Betriebssystemen der Firma Microsoft laufenden Server gebunden. Es gibt zwar freie .NET (und ASP.NET)-Implementierungen, diese sind aber (noch) nicht hundertprozentig kompatibel, und hinken daher neuen .NET-Versionen immer zumindest einige Monate hinterher. Weil jedoch PHP mit Abstand die meistverwendete Skriptsprache für Webprogrammierung ist, haben sich viele Webhoster, speziell im Bereich “Shared Hosting”, eher auf PHP/MySQL-Hosting auf Linux-Plattformen konzentriert. Dies schränkt die Wahlfreiheit beim Hosting ein. Mit dem plattformunabhängigen ASP.NET Core entfällt die Einschränkung auf Windows-Server.
* Für das Hosting auf Windows Servern werden Lizenzgebühren für das Serverbetriebssystem fällig, die Provider in irgendeiner Form an den Kunden weitergeben müssen.

## Silverlight

In Ergänzung zu den etablierten Verfahren, auf die ASP.NET zurückgreift – also HTML, CSS und JavaScript –, hat Microsoft Silverlight entwickelt. Silverlight (vormals WPF/E) ist ähnlich Flash ein Browser-Plug-in, das die Restriktionen von HTML zu umgehen versucht. Im Gegensatz zu Flash wird allerdings der Inhalt (Oberfläche, Animation oder Skript) des Applets in XML zum Browser geschickt (WPF, Windows Presentation Foundation). Dies hat zur Folge, dass solche Seiten auch problemlos mit serverseitigem Code generiert werden können, wenngleich hierfür Programme (Expression Blend) verwendet werden.

## Mono-Implementierung

Im Zusammenhang mit Linux ist das Mono-Projekt hervorzuheben, das ASP.NET (bzw. das .NET Framework ganz allgemein) plattformunabhängig macht. Derzeit sind ASP.NET 2.0, ASP.NET MVC und ASP.NET AJAX implementiert.

Moonlight ist die Entsprechung von Silverlight im Mono-Projekt.

