ASP.NET MVC 4 – Was ist neu?

written by devangelist on August 15, 2012 in API and ASP.NET and ASP.NET MVC with 2 comments

Die Web-API

Die wohl wichtigste Neuigkeit ist die ASP.NET Web API, ein neues Framework um moderne HTTP Services zu erstellen. Wie bereits aus dem MVC Framework gewohnt gibt es auch bei der Web API einen kompletten Support für das Routing, also um sprechende Urls zu erzeugen. Natürlich gibt es auch hier einen Standard-Support für Datenformate wie XML und JSON bzw. eine Möglichkeit es mit eigenen Formattern zu erweitern.

Weitere Features:

  • Filter: wie zum Beispiel das [Authorize]
  • Query Composition: Ein Action-Methode mit dem [Queryable] Filter-Attribut dekorieren und IQueryable zurückgeben um die Web-API z.B. mit OData anzusprechen.
  • Verbesserte Testbarkeit
  • Unterstützung für Inversion of Control (IoC) containers
  • Auch interessant ist die Möglichkeit die Web API über Self- Host auszuführen, also im eigenen, vom IIS unabhängigen Prozess laufen zu lassen.

Neues Default Project Template

Das Template wurde für ASP.NET MVC 4 Projekten komplett überarbeitet, sieht um einiges moderner aus und ist zudem responsiv, d.h. es passt sich der Größe des Browsers an.
Damit passt es sich ebenfalls auf Mobilen Geräten ohne zusätzliche Bearbeitung an und zwingt nicht unbedingt den Weg einer getrennten mobilen Version.

Mobile Project Template

Wem die Möglichkeit des responsiven Layouts nicht ausreicht, gibt es ebenfalls eine getrennte Projekt-Vorlage, welche auf jQuery-Mobile basierend eine touch-optimierte UI bietet.

Im Views\Shared Ordner gibt es zwei Layouts, eines für den Desktop (_Layout.cshtml) und eines für die mobilen Geräte (_Layout.mobile.cshtml). Das selbe Prinzip gilt für Views – zum Beispiel wenn in einem Ordner _Partial.cshtml und _Parcial.mobile.cshtml vorhanden sind.

Ob das mobile oder das desktop-Template verwendet wird, hängt vom UserAgent des Browsers ab. Werden weitere Unterscheidungen benötigt (z.B. die Trennung von IPhone und Android), dann kann dies in der Application_Start-Methode in der Global.asax angegeben werden:

DisplayModeProvider.Instance.Modes.Insert(0,
    new DefaultDisplayMode("iPhone")
    {
        ContextCondition = (context =>
            context.GetOverriddenUserAgent()
                .IndexOf("iPhone", StringComparison.OrdinalIgnoreCase) >= 0)
    });

Durch diese Angabe werden Requests durch den Apple Safari Browser auf dem IPhone ein getrenntes Layout (natürlich nur sofern es exisitert) verwenden: Views\Shared\_Layout.iPhone.cshtml

Besonders wenn automatisch auf den mobilen Geräten auf dessen optimierte Variante weitergeleitet wird, sollte es die Möglichkeit eines manuellen Wechsels zur Desktop Variante geben. Dafür gibt es einen kleinen Helper,  welcher im folgenden NuGet Packet (jQuery.Mobile.MVC) enthalten ist.

Dabei wird neben einem optimierten Layout (Views\Shared\_Layout.Mobile.cshtml) die gewünschte View-Switcher Komponente (Views/Shared/_ViewSwitcher.cshtml) erstellt.


@Html.Partial("_ViewSwitcher")
...

Task Support für asynchrone Controller

Asynchrone Methoden im Controller und haben einen Rückgabe-Typ Task<ActionResult>

public async Task Index(string category) {
    var customerService = new CustomerService();

    return View("Common",
        new CustomerViewModel {
            Customers = await customerService.GetByCategoryAsync(category)
        });
}

Diese bieten neben der Unterstützung für Timeouts auch die Möglichkeit “cancellable”, also abbrechbar zu sein. Dafür wird ein Parameter vom Typ CancellationToken benötigt:

[AsyncTimeout(2500)]
[HandleError(ExceptionType = typeof(TaskCanceledException),
    View = "TimedOut")]
public async Task Index(string category,
    CancellationToken cancellationToken) {
    // ...
}
1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (No Ratings Yet)
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.