ASP.NET MVC 5 – was ist neu?

written by devangelist on September 25, 2013 in Allgemein and ASP.NET and ASP.NET MVC and ASP.NET MVC Web API with 8 comments

Nach dem großen Erfolg vom ASP.NET MVC 4 Framework und der WebAPI kommt nun die nächste Version ins Rennen: ASP.NET MVC 5. Diese wird als Teil des neuen Visual Studio 2013 mitgeliefert, kann aber natürlich problemlos auch bei älteren Projekten nachgeliefert werden. Noch nicht ausprobiert? Dann wird es Zeit, denn mit dem neuen MVC5-Framework werden neben einigen Neuerungen auch ein paar Altlasten beseitigt.

Die Sauerei (auch genannt: One ASP.NET)

Ganz richtig gelesen, mit dem Release von Visual Studio 2013 kann ein richtiger Mix an ASP.NET Technologien gemacht werden. Zum Beispiel, wenn ein Projekt mit MVC5 begonnen wurde, ist es kein Problem, eine Web Form Page hinzuzufügen. Ebenfalls kann die WebAPI nun in ein normales WebForms-Projekt verankert werden. Grund des Ganzen ist, laut Microsoft, dass wir Entwickler, es nun einfacher haben, unsere Sachen in ASP.NET zu entwickeln. Fazit: wo sie recht haben, haben sie recht.

ASP.NET Identity

Das ASP.NET Identity ist das neue Membership-System für alle ASP.NET Anwendungen, denn es basiert im Gegensatz zum alten System auf OWIN und nicht auf das ASP.NET Forms Authentication Modul.

Dies ermöglicht eine problemlose Integration sei es in ein MVC-, als auch in ein WebForms-Projekt. ASP.NET Identity ermöglicht es dem Benutzer, sich einen Account direkt auf der Webseite zu erstellen, oder aber über die Sozialen Netzwerke wie Facebook, Google und Twitter anzumelden. Standardmäßig verwendet das System eine SQL-Server LocalDB Datenbank, welche anschließend für produktiv-Systeme auf SQL Server oder auch auf NoSQL Datenbanken wie Windows Azure Storage tables gebracht werden kann.

Claims-based Authentication

Bei der ASP.NET claims-based authentication besteht die Identität des Benutzers einfach ausgedrückt aus einem Set von Claims, welche das System vertrauen muss und ebenfalls von einem vertrauenswürdigem System ausgestellt werden. Benutzer können sich dabei wie folgt anmelden:

  • mit ihrem Benutzername und Password, welche in der Datenbank gespeichert sind
  • über einen social identity provider wie Facebook, Google oder Twitter
  • über Organisations-Accounts durch Windows Azure Active Directory
  • oder über Active Directory Federation Service (ADFS)

Um zum Beispiel den Google OpenID prodiver zu aktivieren, genügt es folgende Zeilen in der App_Start/Startup.Auth.cs auszukommentieren:

public void ConfigureAuth(IAppBuilder app)
{
    // Enable the application to use a cookie to store information for the signed in user
    app.UseApplicationSignInCookie();

    // Enable the application to use a cookie to temporarily store information about a user logging in with a third party login provider
    app.UseExternalSignInCookie();

    // Uncomment the following lines to enable logging in with third party login providers
    //app.UseMicrosoftAccountAuthentication(
    //    clientId: "",
    //    clientSecret: "");

    //app.UseTwitterAuthentication(
    //   consumerKey: "",
    //   consumerSecret: "");

    //app.UseFacebookAuthentication(
    //   appId: "",
    //   appSecret: "");

    app.UseGoogleAuthentication();
}

Mehr Informationen, wie man eine ASP.NET MVC 5 App mit Facebook oder Google authentifiziert gibt es hier.

Bootstrap

Das neue Projekt-Template beinhaltet jetzt Bootstrap, welches dem Projekt ein ordentliches und responsives Aussehen gibt. Dazu ist das Bootstrap-Framework sehr einfach anzupassen und eignet sich optimal für Projekte, welche schnell umgesetzt werden müssen oder wenig Zeit für Design übrig haben.

MVC5-using-bootstrap

Authentication Filters

Diese Filter bieten im Grunde genommen die Möglichkeit, sich vor die normalen Authorization-Filters in der ASP.NET MVC Pipeline zu hängen. Damit kann die Authentifizierungslogik pro Action, Controller oder global für alle Controllers eingestellt werden. Sie verarbeiten die Anmeldeinformationen der Anfragen und bieten Zugriff auf das jeweilige Prinzipal.

Wenn ein solches Filter-Attribut erstellt werden soll, muss dieses das IAuthenticationFilter-Interface implementieren, welches zwei Methoden definiert: OnAuthentication und OnAuthenticationChallenge (Letztere verwenden wir, um den Zugang anhand des authentifizierten Benutzers einzuschränken).

Ein Beispiel für einen einfachen Filter, welcher den Benutzer einfach zurück auf die Login-Seite leitet, falls dieser nicht authentifiziert ist, sieht wie folgt aus:

public class BasicAuthAttribute : ActionFilterAttribute, IAuthenticationFilter
{
    public void OnAuthentication(AuthenticationContext filterContext)
    {
    }

    public void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext)
    {
        var user = filterContext.HttpContext.User;
        if (user == null || !user.Identity.IsAuthenticated)
        {
            filterContext.Result = new HttpUnauthorizedResult();
        }
    }
}

Filter overrides

Wie der Name schon sagt, ist es mit diesen Filtern möglich, bereits angewendete Filter an einer Action-Methode oder an einem Controller zu überschreiben. Damit sollen bestimmte Filter für einen gewissen Bereich deaktiviert werden. Dies ist besonders nützlich, wenn zum Beispiel ein Filter global gültig ist, dieser aber auf einzelne Methoden nicht angewendet werden soll.

Attribute Routing

Mithilfe von Tim McCall, Author von attributerouting.net, wird Attribute Routing nun in ASP.NET MVC unterstützt. Damit soll es möglich sein, Routen für Action-Methoden und Controllern zu individualisieren:

public class MoviesController : ApiController
{
    [Route("movies")]
    public IEnumerable<Movie> Get() { }
    [Route("actors/{actorId}/movies")]
    public IEnumerable<Movie> GetByActor(int actorId) { }
    [Route("directors/{directorId}/movies")]
    public IEnumerable<Movie> GetByDirector(int directorId) { }
}

Dazu gibt es noch einen Syntax für optionale Parameter, Standardwerte und Einschränkungen:

// Optionaler Parameter
[Route("people/{name?}")]
// Standard Wert
[Route("people/{name=Rob}")]
// Constraint: Nur alphanumerische Werte
[Route("people/{name:alpha}")]

Das Attribute Routing kann natürlich auch in der neuen Web API 2 verwendet werden.

Fazit

Kurz und bündig: Ja, wir finden die Neuerungen recht nett, die meisten auch sinnvoll und brauchbar. Die Unterstützung von OWIN ist gut gelungen, insbesondere, dass neue Komponenten (wie ASP.NET Identity) auch als Middleware zur Verfügung stehen.

Dass sich Microsoft immer mehr in die Open-Source Richtung bewegt, wird damit unterstrichen und dies schafft sicherlich Sympathie. Dass Bootstrap von Haus aus implementiert wird, muss in unseren Augen nicht an die große Glocke gehängt werden, trotzdem: Wir sind zufrieden!

Mich würde es interessieren, wer nun auf die neue Version updated und wer noch wartet. Comments? :-)

ASP.NET MVC 5 – was ist neu?: 1 Stern2 Sterne3 Sterne4 Sterne5 Sterne 5,00 von 5 Punkte, 8 abgegebene Stimmen.
Loading ... Loading ...

About the Author

Roberto Bez ist passionierter Webentwickler und TechLead bei der HolidayCheck AG. Für Roberto bedeutet das Entwickeln nicht nur Arbeit, sondern auch Freude, Motivation und täglich neue, aufregende Herausforderungen. Besonders gerne setzt er sich mit neuen Webtechnologien sowie Datenbanken aller Art auseinander und versucht diese in die tägliche Anwendungsentwicklung miteinzubringen. Neben dem Entwickeln trifft man ihn gerne Abends beim Laufen oder im Sommer bei Mountainbike-Touren durch die schönen Berge Südtirols.