- Razor Pages bietet ein seitenzentriertes Modell auf Basis von ASP.NET Core und nutzt dieselbe leistungsstarke Routing-, Middleware- und Razor-View-Engine wie MVC.
- In realen Projekten dreht sich alles um den Ordner Pages, wwwroot, appsettings.json und Program.cs, wo Dienste, Middleware und Fehlerbehandlung konfiguriert werden.
- Tools wie Visual Studio, Rider und VS Code vereinfachen die Entwicklung, das Debugging, die Navigation und das Refactoring von Modellen, Ansichten und Razor-Syntax.
- ASP.NET Core vereinfacht die Veröffentlichung von Razor-Apps auf IIS, Azure, benutzerdefinierten Servern oder Docker und ermöglicht so skalierbare und wiederholbare Bereitstellungen.
Wenn Sie von Angular plus ASP.NET Web API kommen und anfangen, C# im Backend zu genießen, ist Razor Pages eine unglaublich natürliche Möglichkeit, diese Freude auch im Frontend zu erleben, ohne Ihre bestehenden JavaScript-Kenntnisse aufgeben zu müssen. Anstatt sich Hals über Kopf in einen völlig anderen UI-Stack zu stürzen, können Sie im vertrauten ASP.NET Core-Gebiet bleiben, die Razor-Syntax für serverseitiges Rendering verwenden und trotzdem JavaScript überall dort einstreuen, wo es sinnvoll ist.
ASP.NET Core Razor Pages ist Microsofts empfohlener Ansatz zum Erstellen moderner Webanwendungen auf .NET-Basis und bietet ein übersichtliches, seitenbasiertes Modell, das auf der leistungsstarken ASP.NET Core-Pipeline aufbaut. Razor Pages ist plattformübergreifend, arbeitet nahtlos mit Tools wie Visual Studio, Visual Studio Code und JetBrains Rider zusammen und skaliert von kleinen Prototypen bis hin zu produktionsreifen, datenbankgestützten Anwendungen. In diesem Leitfaden zeigen wir Ihnen, wie Razor Pages-Anwendungen in der Praxis strukturiert sind, wie Program.cs die einzelnen Komponenten miteinander verbindet, wie statische Dateien und Konfigurationen funktionieren und welche Rolle Tools, Debugging und Deployment spielen.
Was ASP.NET Core Razor Pages eigentlich ist (und wie es sich im Vergleich zu MVC verhält)
Razor Pages ist eine Funktion von ASP.NET Core, mit der Sie Webanwendungen um Seiten anstatt um Controller herum erstellen können. Dies bietet ein einfacheres mentales Modell und verwendet dennoch das gleiche zugrunde liegende Framework wie MVC. Im Hintergrund läuft es auf dem gleichen Routing-, Middleware- und Hosting-Stack wie Controller und Views, aber jede Seite handhabt ihr eigenes Verhalten, anstatt alles in Controller-Klassen zu zentralisieren.
Jede Razor Page wird typischerweise durch zwei Dateien repräsentiert: eine .cshtml-Datei für das Markup und eine .cshtml.cs-Datei für die C#-Logik der Seite. Die .cshtml-Datei enthält Ihren HTML-Code, vermischt mit Razor-Syntax (z. B. Schleifen, Bedingungen und HTML-Hilfsfunktionen), während die Code-Behind-Datei .cshtml.cs Handler-Methoden wie OnGet, OnPost, Modelleigenschaften und jegliche Logik enthält, die zum Rendern oder Verarbeiten der Seite benötigt wird.
Vor Razor Pages war das vorherrschende Muster in ASP.NET das MVC-Modell, bei dem Controller Ansichten zurückgaben und alle Anfragen über Aktionsmethoden weitergeleitet wurden. Das MVC-Modell wird weiterhin vollumfänglich unterstützt und ist ein bewährtes Muster mit starken Konventionen. In vielen Fällen ist Razor Pages jedoch schneller zu verstehen, da der Code, der eine Seite lädt und verarbeitet, physisch neben dem Markup liegt und nicht in einem separaten Controller versteckt ist.
Obwohl Razor Pages den Fokus von Controllern weg verlagert, verwendet es weiterhin die gleiche Razor-View-Engine und unterstützt sowohl HtmlHelpers als auch TagHelpers zur Generierung von dynamischem HTML. TagHelpers sind besonders praktisch: Sie erweitern normale HTML-Tags um Attribute wie asp-action, asp-controller or asp-route So können Sie Links und Formulare mit Backend-Endpunkten verknüpfen, ohne eine Menge manueller URLs oder Inline-JavaScript schreiben zu müssen.
Für Entwickler, die bereits JavaScript beherrschen und Erfahrung mit SPA-Frameworks haben, bietet Razor Pages einen hybriden Ansatz: serverseitig gerendertes HTML für schnelle erste Ladezeiten und SEO, wobei JavaScript und Frontend-Bibliotheken bei Bedarf darübergelegt werden. Sie sind nicht an ein bestimmtes JS-Framework gebunden und können Backend und Frontend in derselben Lösung halten, was die Bereitstellung und Wartung vereinfacht.
Erstellen und Ausführen einer Razor Pages-Webanwendung
Wenn Sie mit Visual Studio, Visual Studio Code oder Rider ein neues ASP.NET Core Razor Pages-Projekt erstellen, verbindet die Vorlage eine minimale, aber vollständige Anwendung, einschließlich Program.cs, dem Ordner Pages, Konfigurationsdateien und dem statischen Web-Root. Sie erhalten sofort eine funktionierende Website, die Sie umgehend betreiben und dann zu etwas Anspruchsvollerem wie einem Filmkatalog oder einer anderen datengetriebenen Anwendung weiterentwickeln können.
Bevor Sie die Anwendung über HTTPS ausführen können, benötigt ASP.NET Core ein Entwicklungszertifikat, dem Ihr Betriebssystem vertraut. Beim ersten Ausführen des Projekts wird Ihnen möglicherweise ein Dialogfeld angezeigt, in dem Sie aufgefordert werden, dem Zertifikat zu vertrauen. Wenn dieser Dialog erscheint, wählen Sie Ja zeigt an, dass Sie damit einverstanden sind, dass das lokale Entwicklungszertifikat für HTTPS-Datenverkehr auf Ihrem Rechner verwendet wird. Dies ist erforderlich, um sichere Endpunkte ordnungsgemäß und ohne Browserwarnungen zu testen.
Unter Windows, macOS oder Linux können Sie die Anwendung in Visual Studio Code durch Drücken einer bestimmten Taste starten. Ctrl+F5 Sie können das Programm ohne Debugging ausführen oder das Ausführen- und Debugging-Panel verwenden, wenn Sie den Debugger anhängen möchten. Beim ersten Mal fordert VS Code Sie möglicherweise auf, einen Debugger-Typ auszuwählen, z. B. C#, .NET 5+ und .NET Core oder eine bestimmte Startkonfiguration wie C#: RazorPagesMovie [https] RazorPagesMovie abhängig von der .NET-Version und Ihrer Workspace-Konfiguration.
Nach dem Start öffnet sich Ihr Standardbrowser mit einer URL, die der folgenden ähnelt: https://localhost:<port>, wobei der Port zufällig zugewiesen oder in launchSettings.json angegeben wird, und Sie sich die Startseite der Razor Pages-App ansehen. In einigen Vorlagen sehen Sie stattdessen http://localhost:5001 oder einem anderen Hafen; entscheidend ist, dass localhost weist darauf hin, dass es sich um Ihren eigenen Rechner und nicht um einen externen Host handelt.
Sobald Sie mit dem Testen fertig sind, können Sie die laufende Anwendung in Ihrer IDE beenden: Verwenden Sie in Visual Studio Code das Menü „Ausführen“ und wählen Sie „Debuggen beenden“ oder drücken Sie die entsprechende Taste. Shift+F5In Visual Studio für Mac hingegen verwenden Sie Debuggen > Debuggen beenden. Dadurch wird die für die Sitzung gestartete Kestrel-Webserver-Instanz beendet und der Port für weitere Ausführungen freigegeben.
Die Projektstruktur verstehen: Ordner und wichtige Dateien
In der Praxis sind Razor Pages-Anwendungen um einige wenige wichtige Ordner und Konfigurationsdateien herum organisiert, mit denen Sie ständig arbeiten werden: Pages, wwwroot, appsettings.json und Program.cs (und in älteren Versionen Startup.cs). Es ist wichtig, sich mit diesen Elementen vertraut zu machen, da praktisch jedes Tutorial, jedes Beispielprojekt oder jede Produktionsarbeit die gleichen Konventionen verwendet.
Der Ordner „Pages“ ist das Herzstück eines Razor Pages-Projekts. Er enthält alle .cshtml-Seiten und ihre .cshtml.cs-Code-Behind-Dateien sowie gemeinsam genutzte Layout- und Teilansichten. Jedes Seitenpaar (z. B. Index.cshtml und Index.cshtml.cs) stellt einen aufrufbaren Endpunkt in Ihrer Anwendung dar, und spezielle Dateien, die mit einem Unterstrich beginnen, wie z. B. _Layout.cshtml, definieren Sie Inhalte, die auf mehreren Seiten wiederverwendet werden.
Die Layoutdatei, üblicherweise benannt _Layout.cshtml, definiert das Layout Ihrer Website, wie z. B. die obere Navigationsleiste, die Fußzeile und den Copyright-Hinweis, und bietet einen Ort, an dem der Inhalt jeder einzelnen Seite gerendert werden kann. Wenn Sie das Layout ändern, beeinflussen Sie sofort das Erscheinungsbild aller Razor Pages, die es verwenden. Daher ist es der ideale Ort, um Menüs, Branding und gemeinsam genutzte Skripte oder Stile zu bearbeiten.
Der Ordner wwwroot ist das festgelegte Web-Root-Verzeichnis, in dem statische Ressourcen wie CSS, JavaScript, Bilder und einfache HTML-Dateien gespeichert werden, die direkt vom Webserver ausgeliefert werden können. Alles, was sich unter wwwroot befindet, kann vom Browser aufgerufen werden (vorbehaltlich Ihrer Konfiguration für statische Dateien). Daher ist es der richtige Ort für Website-Stylesheets, clientseitige Bibliotheken und Bilder, auf die in Ihrem Markup verwiesen wird.
Die Konfiguration für die App wird typischerweise gespeichert in appsettings.json (und umgebungsspezifische Varianten wie appsettings.Development.json), die Einstellungen wie Verbindungszeichenfolgen und Feature-Flags enthalten. Das Konfigurationssystem von ASP.NET Core lädt diese Dateien und führt sie mit Umgebungsvariablen und anderen Anbietern zusammen, wodurch es einfach wird, Abschnitte an stark typisierte Optionsklassen in Ihrem Code zu binden.
Program.cs und die ASP.NET Core-Pipeline
Die Datei Program.cs enthält den Einstiegspunkt für Ihre Razor Pages-Anwendung und definiert, wie Webhost, Dienste und Middleware-Pipeline konfiguriert werden, bevor die erste Anfrage Ihre Website erreicht. In modernen ASP.NET Core-Versionen verwendet Program.cs ein optimiertes „minimales Hosting“-Modell mit einer Anweisung auf oberster Ebene, die eine WebApplicationBuilder und erstellt und konfiguriert dann das WebApplication Beispiel.
Das typische Muster in Program.cs beginnt mit var builder = WebApplication.CreateBuilder(args); wodurch ein Host mit allgemeinen Standardeinstellungen eingerichtet wird, und ruft dann auf builder.Services.AddRazorPages(); Razor Pages beim Dependency-Injection-Container registrieren. Nach der Konfiguration der Dienste, var app = builder.Build(); erstellt das Anwendungsobjekt, das Sie dann mit Middleware und Endpunkten verbinden.
Fehlerbehandlung und Sicherheitsverhalten hängen stark von der Umgebung ab, daher sieht man üblicherweise eine Umgebungsprüfung wie diese: if (!app.Environment.IsDevelopment()) um Funktionen in Produktionsqualität zu ermöglichen. Innerhalb dieses Zustands findet man normalerweise app.UseExceptionHandler("/Error"); die unbehandelte Fehler an eine spezielle Fehlerseite weiterleitet, und app.UseHsts(); Dadurch wird HTTP Strict Transport Security (HSTS) aktiviert, um Browser anzuweisen, für Ihre Domain immer HTTPS zu verwenden.
Die Middleware-Pipeline wird dann mit Aufrufen wie beispielsweise folgenden zusammengestellt: app.UseHttpsRedirection();, app.UseStaticFiles(); or app.MapStaticAssets();, app.UseRouting(); und optional app.UseAuthorization(); gefolgt von Endpunktzuordnungen. Die HTTPS-Umleitung erzwingt das Upgrade unsicherer HTTP-Anfragen auf HTTPS, die Middleware für statische Dateien (oder das neuere Static Asset Mapping in .NET 9) ermöglicht die direkte Bereitstellung von Ressourcen aus dem wwwroot-Verzeichnis, und das Routing entscheidet, welcher Endpunkt die jeweilige eingehende URL verarbeitet.
Schließlich werden Razor Pages mit dem Routing verbunden. app.MapRazorPages(); optional verkettet mit .WithStaticAssets(); in neueren Vorlagen zur Integration der Optimierung statischer Assets, und die Anwendung wird gestartet mit app.Run();. An diesem Punkt lauscht die App auf den konfigurierten Ports und der Kestrel-Server ist bereit, echte Anfragen zu bearbeiten, sei es lokal in der Entwicklung oder auf einem Produktionshost wie IIS, Azure App Service oder Docker.
Razor Pages, Modelle und Ansichtsmodelle in realen Anwendungen
Hinter jeder etwas komplexeren Razor Pages-Anwendung verbirgt sich eine Reihe von Domänenmodellen und Ansichtsmodellen, die Ihre Daten und deren Darstellung repräsentieren, egal ob Sie einen Filmkatalog, einen Blog oder ein Business-Dashboard verwalten. Modelle sind typischerweise eng mit Datenbankentitäten verknüpft, während Ansichtsmodelle auf einen bestimmten Bildschirm oder Benutzerablauf zugeschnitten werden können, indem mehrere Modelle oder vorformatierte Werte für eine einfachere Darstellung kombiniert werden.
Ein gängiger Entwicklungsablauf besteht darin, mit einfachen C#-Klassen zu beginnen, die Felder und Methodensignaturen als Platzhalter verwenden, und diese schrittweise zu richtigen Modellen mit gekapselten Eigenschaften, Validierungsattributen und Logik weiterzuentwickeln. Tools wie JetBrains Rider erleichtern diese Entwicklung durch gezielte Aktionen, die Felder automatisch in Eigenschaften umwandeln, abgeleitete Typen für Vererbungshierarchien erstellen und andere Refaktorierungen anwenden, während Sie Ihr Objektmodell verfeinern.
Vererbung und Schnittstellen tragen dazu bei, eine kohärente Struktur für Ihre Modelle zu gewährleisten, sie an realen Geschäftsregeln auszurichten und Polymorphismus zu ermöglichen, bei dem bestimmte Verhaltensweisen geteilt werden, sich die Implementierungen jedoch unterscheiden. Zum Beispiel könnte man eine Basis haben ContentItem Typ mit abgeleitet Movie, Series , Documentary Klassen, die sich zwar in Details unterscheiden, aber einen gemeinsamen Vertrag aufweisen, der in der gesamten Anwendung verwendet wird.
Sobald Ihre Modelle vorhanden sind, können Razor Pages oder MVC-Ansichten entweder manuell oder mithilfe von Gerüstbausteinen erstellt werden, die Seiten zum Auflisten, Erstellen, Bearbeiten und Löschen von Entitäten generieren. Scaffolding beschleunigt die frühe Entwicklungsphase erheblich und stellt sicher, dass Routing, Modellbindung und Validierung korrekt verknüpft sind, was Sie dann mit Ihrem eigenen Markup und Styling anpassen können.
Die in .cshtml-Dateien verwendete Razor-Syntax lässt sich nahtlos mit stark typisierten Modellen und View-Modellen kombinieren. Dadurch können Sie Daten anzeigen, Schleifen und Bedingungen ausführen sowie Links und Formulare mithilfe von HtmlHelpers oder TagHelpers generieren, ohne die Kompilierzeitsicherheit zu beeinträchtigen. Diese Mischung aus C# und Markup hält viel Logik serverseitig, liefert aber dennoch sauberes HTML im Browser, das gut mit CSS und JavaScript zusammenarbeitet.
Arbeiten mit Razor-Syntax, TagHelpers und Navigation in Rider
Razor-Syntax ist eine schlanke Schicht über HTML, die immer dann zum Einsatz kommt, wenn @ Es erscheint ein Symbol, wodurch es einfach wird, C#-Ausdrücke, Anweisungen oder Hilfsaufrufe direkt in Ihr Markup einzubetten. Sie können Listen von Elementen durchlaufen, Elemente je nach Bedingungen ein- oder ausblenden oder Werte und formatierte Datumsangaben anzeigen, ohne eine separate Template-Sprache zu schreiben oder überall JavaScript einzustreuen.
TagHelpers fühlen sich wie eine natürliche Erweiterung von HTML an, bei der spezielle Attribute, die mit einem Punkt beginnen, verwendet werden. asp- Das Verhalten oder die Ausgabe von Elementen wird verändert, wobei häufig ältere HtmlHelper-Methoden ersetzt werden und die Notwendigkeit von Inline-Skript-Klebstoff entfällt. Beispiele umfassen asp-action , asp-controller um Anker-Tags und Formulare bestimmten Aktionen zuzuordnen oder Attribute wie asp-route-id Parameter sauber in URLs übergeben.
Die Unterstützung durch eine IDE ist besonders wichtig, wenn man sich intensiv mit HTML beschäftigt. Rider bietet hilfreiche Funktionen wie Breadcrumbs am unteren Rand des Editors, die Ihre aktuelle Position in der Dokumentstruktur anzeigen. Die Breadcrumbs können unter „Einstellungen“ oder „Optionen“ im Editor-Bereich angepasst werden und erleichtern die Navigation in langen Razor-Dateien mit verschachtelten Tags erheblich.
In MVC-Projekten versteht Rider auch die Konventionen, die Controller, Aktionen und Ansichten verknüpfen, sodass beim Bewegen des Mauszeigers über Aktionsergebnisse die möglichen Ansichtspfade angezeigt werden können und Strg + Klick (oder Befehlsklick (auf macOS) springt direkt zur entsprechenden .cshtml-Datei. Tastenkombinationen wie Strg + B or Befehl-B Sie bieten eine schnelle Möglichkeit, durch Ihre Codebasis zu navigieren, ohne in Projektmappen-Explorern suchen zu müssen.
Neben Razor-spezifischen Werkzeugen bietet Rider eine breite Palette an Funktionen und Schnellkorrekturen für HTML, CSS und JavaScript, die Ihnen helfen, sauberen, gut strukturierten clientseitigen Code in derselben IDE wie Ihr C#-Backend zu schreiben. Durch diese enge Integration lassen sich viele Kontextwechsel beim Erstellen komplexer, interaktiver Benutzeroberflächen vermeiden, die weiterhin auf serverseitig gerenderten Razor-Ansichten oder -Seiten basieren.
Debuggen von Razor Pages- und ASP.NET Core-Anwendungen
Debugging ist eine alltägliche Aufgabe in der Webentwicklung, und ASP.NET Core-Anwendungen, die Razor Pages ausführen, bilden da keine Ausnahme. Daher ist eine starke Debugging-Unterstützung in Ihrer IDE unerlässlich. Sowohl Visual Studio als auch Rider bieten interaktive Debugger, die sich an Ihren Kestrel-Prozess anhängen, den C#-Code schrittweise durchlaufen, Variablen untersuchen und Ausdrücke auswerten können, während die Anwendung ausgeführt wird.
Der Rider-Debugger unter Windows unterstützt „Bearbeiten und Fortfahren“. Dadurch können Sie Code anpassen, während die App an einem Haltepunkt angehalten ist, und die Änderungen anwenden, ohne die gesamte Debugging-Sitzung neu starten zu müssen. Die Möglichkeit, während eines Debugging-Laufs kleine Fehler zu beheben oder zu experimentieren, beschleunigt die Fehlersuche erheblich, insbesondere bei großen Projekten mit nicht unerheblichen Startzeiten.
Die standardmäßige Entwickler-Ausnahmeseite in ASP.NET Core wird automatisch aktiviert, wenn die Umgebung auf Entwicklung eingestellt ist. Sie liefert Ihnen einen detaillierten Stacktrace, Anforderungsinformationen und Diagnosedaten, sobald unbehandelte Ausnahmen auftreten. Diese Ansicht ist beim lokalen Debuggen äußerst hilfreich, aber in der Produktion gefährlich, da sie interne Details über Ihre Anwendung und Umgebung preisgeben kann.
Zum Schutz sensibler Informationen deaktivieren Produktions- und Testumgebungen typischerweise die Entwickler-Ausnahmeseite und verwenden stattdessen die konfigurierte Ausnahmebehandlungsroute, oft /Error, um einen benutzerfreundlichen Fehlerbildschirm anzuzeigen, während die tatsächlichen Details serverseitig protokolliert werden. Dieses Verhalten wird in Program.cs über die Umgebungsprüfung und Aufrufe von gesteuert. UseExceptionHandler , UseHsts.
Wenn die Dinge wirklich aus dem Ruder laufen und Tutorials nicht zu Ihrem Vorgehen passen, ist es oft hilfreich, Ihr Projekt mit einem bekannten guten Beispiel von Microsoft oder anderen maßgeblichen Quellen zu vergleichen. Viele offizielle Razor Pages-Tutorials veröffentlichen ein fertiges Beispielprojekt, das Sie ansehen oder herunterladen können, um es mit Ihrem eigenen Code zu vergleichen und fehlende Konfigurationen, Tippfehler oder falsch platzierte Dateien aufzuspüren.
Veröffentlichung und Bereitstellung echter ASP.NET Core Razor-Apps
Beim Versand Ihrer Razor Pages-App zahlt sich die gesamte zuvor vorgenommene Strukturierung und Konfiguration aus, denn ASP.NET Core unterstützt verschiedene Bereitstellungsoptionen, die zu unterschiedlichen Hostingumgebungen und Arbeitsabläufen passen. Egal ob Sie IIS unter Windows, Linux-Container in Docker oder eine verwaltete Plattform wie Azure App Service bevorzugen, der Veröffentlichungsprozess kann von MSBuild gesteuert und in Ihre CI/CD-Pipelines integriert werden.
Sowohl Visual Studio als auch Rider bieten Veröffentlichungsprofile an, mit denen Sie Ihre Anwendung paketieren und mithilfe von Web Deploy (MSDeploy) auf IIS bereitstellen, in einen lokalen oder Netzwerkordner kopieren oder direkt über FTP, FTPS oder SFTP auf einen Remote-Server übertragen können. Durch das Erstellen eines Veröffentlichungsprofils werden Ihre Bereitstellungseinstellungen so kodiert, dass zukünftige Veröffentlichungen so einfach sind wie die Auswahl des Profils und das Klicken auf eine Schaltfläche oder das Ausführen eines Befehls.
Für Cloud-Szenarien ist Azure App Service ein beliebtes Ziel, und IDEs integrieren Azure-Tools, um Web-Apps direkt aus Ihrem Projekt zu erstellen und zu veröffentlichen, wobei im Hintergrund wiederum MSBuild und MSDeploy zum Einsatz kommen. Dieser Ansatz gewährleistet Konsistenz bei Build- und Deployment-Prozessen in lokalen und Cloud-Umgebungen und kann in Azure DevOps, GitHub Actions oder anderen CI-Systemen automatisiert werden.
Docker ist eine weitere erstklassige Option für ASP.NET Core, mit der Sie Ihre Razor Pages-Anwendung containerisieren können, sodass sie in jeder Umgebung, die Container unterstützt, vorhersehbar ausgeführt werden kann. Rider und Visual Studio können Ihnen beim Generieren von Dockerfiles und docker-compose-Konfigurationen helfen und so einen Workflow ermöglichen, bei dem Sie Ihre Anwendung in Containern entwickeln, debuggen und bereitstellen können, entweder lokal oder in Orchestrierungsplattformen wie Kubernetes.
Unabhängig vom Zielsystem kompiliert der Veröffentlichungsschritt Ihren C#-Code, bündelt Razor-Ansichten, kopiert statische Assets und kann je nach Einstellungen auch eine eigenständige Laufzeitumgebung generieren, sodass auf dem Hostrechner keine gemeinsam genutzte .NET-Installation erforderlich ist. Durch diese Bündelung wird Ihr Entwicklungsprojekt in ein einsatzbereites Artefakt verwandelt, das von echten Benutzern verwendet werden kann.
Razor Pages fügt all diese Elemente zusammen – von Entwicklungszertifikaten und Program.cs über Pages und wwwroot bis hin zu Debugging und Veröffentlichung – und bietet damit eine pragmatische Möglichkeit, praxisnahe ASP.NET Core-Webanwendungen zu erstellen, die wartungsfreundlich, leistungsstark und komfortabel für Entwickler sind, die bereits gerne mit C# arbeiten und noch nicht bereit sind, für jede Situation vollständig auf ein Single-Page-Framework zu setzen.