© DrHitch/Shutterstock.com
.NET Core 1.0 und 1.1

3 MVC-Webanwendungen mit ASP.NET Core 1.0


Für Webentwickler bringt das neue Webframework ASP.NET Core einige Änderungen. Es gibt zwar noch das MVC-Programmiermodell, jedoch mit vielen geänderten APIs. Aber auch schöne Neuerungen sind dabei.

Im bisherigen .NET „Full“ Framework gibt es verschiedene Frameworks für das serverseitige Generieren von Webseiten: Web Forms, Dynamic Data, Model View Controller (MVC) und WebPages – mit verschiedenen Vor- und Nachteilen. Im überarbeiteten, plattformneutralen ASP.NET Core 1.0 beschränkt sich Microsoft zunächst auf MVC. WebPages sollen später folgen (Abb. 3.1). Zu ASP.NET Core MVC gehört auch die Realisierung von Web-APIs, die in Kapitel 2 vorgestellt wurden. Als Programmiersprache kann man derzeit nur C# verwenden. Die Unterstützung für Visual Basic .NET ist zwar angedacht, aber als „Future Work“ nicht mit einem konkreten Termin in der Planung [1].

image

Abbildung 3.1: Frameworks in ASP.NET und ASP.NET Core

Projektvorlagen

In Visual Studio mit installierbaren Werkzeugen für .NET Core [2], die aber noch Preview-Status haben, gibt es insgesamt sechs Projektvorlagen für ASP.NET Core: Die Vorlagen Empty, Web API und Web Application gibt es jeweils in zwei Varianten mit Basis .NET Core oder dem bisherige .NET „Full“ Framework. In der Vorlage „Web Application“ (Abb. 3.2) bekommt der Entwickler eine komplette kleine Website mit Layoutvorlage (auf Basis von Twitter Bootstrap) und Benutzerverwaltung. Bei der Benutzerverwaltung wählt der Entwickler wie bisher zwischen Windows (inkl. Active Directory), Azure Active Directory oder einer lokalen Datenbank (für den Datenbankzugriff nutzt die Projektvorlage Entity Framework Core und Microsoft SQL Server. Andere Datenbanktreiber lassen sich leicht einbinden).

image

Abbildung 3.2: Projektstruktur einer ASP.NET Core MVC „Web Application“

Auch die Authentifizierung via Microsoft Account, Google, Twitter und Facebook sowie anderen OpenID-Connect-/OAuth-fähigen Anbietern unterstützt Microsoft durch separate NuGet-Pakete. Unter [3] findet man zahlreiche Provider wie Dropbox, LinkedIn und PayPal. Weitere Vorlagen (zurzeit die gegenüber „Web Application“ weniger umfangreiche „MVC Starter Application“ und „Static Website“) gibt es im ASP. NET Core Template Pack [4].

Abweichend von den Betaversionen verzichtet Microsoft darauf, in den ASP.NET-Vorlagen gleichzeitig für .NET Core und das bisherige .NET Framework zu kompilieren. Die Projektstruktur ist dadurch einfacher. Ebenfalls nicht mehr im Standard vorhanden ist die Verwendung der JavaScript-basierten Build-Werkzeuge GULP oder Grunt. Microsoft setzt nun für Minifizierung und Bündeln wieder auf eine Visual-Studio-Erweiterung [5]. Der „Bundler & Minifier“ wird konfiguriert über eine Datei bundleconfig.json im Projektwurzelverzeichnis. Minifizierung und Bündeln kann der Entwickler dann über Task Runner Explorer in den Übersetzungsprozess einbinden (Abb. 3.3) oder auch manuell über Kontextmenübefehle in Solution Explorer auslösen.

image

Abbildung 3.3: Einbinden von Tasks des „Bundler & Minifier“ in den Übersetzungsprozess

Das Entwicklungsteam begründet das Weglassen von GULP und Grunt damit, dass diese Lösung auch Node.js und npm zur Entwicklungszeit erforderte, was einige .NET-Entwickler verwirrt hat [6]. Die Integration mit GULP und Grunt in den Task Runner Explorer ist aber noch möglich, und Microsoft beschreibt in der Dokumentation, wie man sie wieder einbinden kann [7].

Geblieben aus den Betaversionen ist die Hauptstruktur mit dem Word „wwwroot“ (Abb. 3.2), in dem alle statischen Dateien (.html, .js, .css usw.) landen müssen, die für die Verbreitung der Webanwendung gebraucht werden. Die Dateien können dort manuell eingefügt oder im Rahmen des Build-Vorgangs aus dem /src-Ordner dorthin kopiert werden.

Als Paketmanager unterstützt Visual Studio nun nicht nur NuGet und NPM, sondern auch Twitters Bower. Das Paket-Repository auf www.bower.io bietet für die Webentwicklung deutlich mehr und meist aktuellere Pakete im Bereich JavaScript und CSS als www.nuget.org. Bower bedient man wie NuGet über einen Dialog (Dependencies/Bower/Manage Bower Packages). Alternativ kann der Entwickler die Pakete mit der gewünschten Versionsnummer (* steht für eine beliebige Version) direkt in der Datei bower.json erfassen; die Datei wird allerdings im Projektmappenexplorer erst sichtbar, wenn man „Show all files“ aktiviert.

Eine ähnliche Grundstruktur wie die Visual-Studio-Vorlage „Web Application“ erzeugt der auf allen Plattformen verfügbare Kommandozeilenbefehl dotnet new –t web. Als Datenbanktreiber ist hier im Standard SQLite und als Build-Werkzeug GULP eingebunden. Auch der in der Webwelt weit verbreitete Codegenerator Yeoman [8] stellt Projektvorlagen für ASP.NET Core MVC bereit.

Controller und View

Bei Verwendung der Vorlage „Web Application“ enthält die startup.cs-Datei in der Configure() und ConfigureServices() schon die für eine Webanwendung sinnvolle Einbindung der Middleware-Komponenten zur Darstellung statischer Dateien, die Einbindung mit MVC mit einer Standardroute und die Umlenkung auf eine Fehlerseite, wobei hier zwischen Entwicklungsumgebung (ausführliche Fehlerseite) und Betriebsumgebung (spartanische Fehlerseite) unterschieden ist (Listing 3.1). Für die Entwicklungszeit wird auch Browser Link aktiviert, d. h., wie bisher kann der Entwickler aus Visual Studio heraus per Debugging oder „View in Browser“ gestartete Browserinstanzen zum Reload auffordern.

public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}

public void Configure(IApplicationBuilder app, IHostingEnvironmentenv, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole();

if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}

app.UseStaticFiles();

app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}

Listing 3.1: Start-up-Klasse für MVC in ASP.NET Core

Anders als das bisherige ASP.NET MVC kompiliert Visual Studio bei einem Browser-Reload eine Controllerklasse automatisch neu, wenn sich an ihm etwas geändert hat. Allerdings funktioniert dies nur in Verbindung mit „View in Browser“, nicht mit dem Debugger. Durch das Kompilieren entsteht wie bisher eine DLL im Dateisystem. Leider hat Microsoft das in der Betaversion von ASP.NET ...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang