IIS einrichten

ISS Intro
Einführung in die Microsoft Internet Information Services
IIS mit ASP.NET
Einrichten von ASP.NET auf einem IIS
Web Deploy
Automatisierte Installation von ASP.NET Webanwendungen mit WebDeploy

ASP.NET Webforms

Übersicht der Architektur

Der klassische Microsoft- Baukasten für Webanwendungen. Entstanden als Nachfolger der VB-Script basierten Active Server Pages, bei denen im Markup serverseitig auszuführender Code in speziellen Tags eingebettet wurde: <p> <% Dim sum = 1 + 2 %> Summe = <% Dim sum = 1 + 2 %></p>. Der serverseitige Code wurde mittels untypisiertem VB-Script implementiert.

ASP.NET WebForms ist deutlich leistungsfähiger als sein Vorgänger, indem für die serverseitgen Implementierung streng typisierte .NET Sprachen wie C# oder VB.NET angeboten werden. Der serverseitige Code kann zudem in eine sog. code-behind Datei ausgelagert werden. Dabei wurde ein MV- Pattern wie in Windows Forms implementiert. Die Logik in der Code- Behind- Datei wird auch als Page- Controller bezeiichnet.

ASP.NET MVC

Wiki, offizielle Microsoft Webseite

Seit 2009 entwickelt Microsoft das neue Framework ASP.NET MVC, welches dem Programmierer mehr Möglichkeiten und damit auch mehr Verantwortung in der clientseitigen Programmierung bietet. Erreicht wird dies durch Einsatz des MVC- Architekturmusters.

Funktionsprinzip von MVC:

WebForms vs. ASP.NET

→Vergleich der beiden Architekturen.

Struktur von ASP.NET MVC Projekten

→Strukturierung von ASP.NET Projekten.

Implementierung von restful Webanwendungen mit ASP.NET MVC

→Implementierung eines REST HATEOAS Zustandsautomaten mit ASP.NET MVC.
→ Beispielanwendung "MVC.Rest.Calculator" in der Projektmappe ASP.MVC

MVC Message Processing Pipeline

Die Verarbeitungsstufen eines Http- Request zum Http Response werden Pipeline genannt. Für ASP.NET MVC sind sie detailiert hier beschrieben.

Im Folgenden wird die Programmierung der einzelnen Stufen beschrieben.

Routing

→URL's auf Actions nach festgelegten Mustern aufbauen.

Controller - Eventhandler

Bei der Verarbeitung eines Requests feuert ein Controller eine Reihe von Events. Sie sind Erweiterungspunkte, um z.B. das allgemeine Verhalten eines Controllers beim Auftreten einer Exception zu definieren.

Actionfilter

Einführung in Actionfilter- Programmierung Alternativ zu den Events der Controller- Basisklasse kann der Entwickler mit Actionfilter den Aufruf einer Action vor und nachbereiten. Für eine Action wird ein Actionfilter definiert, indem die Action mit einem speziellen Attribut ausgezeichnet wird. Die Attriubute sind von der Basisklasse System.Web.Mvc.ActionFilterAttribute abgeleitet. Die Definition eigener Actionfilter durch ableiten von System.Web.Mvc.ActionFilterAttribute ist möglich (→ z.B. Klasse MvcTools.Actionfilter.MyLoggerActionFlt)

Reihenfolge der Aktivierung der Eventhandler eines Actionfilters.

Für einzelne Actions werden Actionfilter aktiviert, indem die Actions mit ihnen attributiert werden:

[MvcTools.Actionfilter.MyLoggerActionFlt]
public ActionResult Index()
{
    return View();
}
Wird mit einem Actionfilter statt einer einzelnen Action der gesamte Controller attributiert, dann werden alle Actions des Controllers vom Filter kontrolliert.
[HandleError(View = "~/Views/Errors/Err.cshtml")]
public class CalcController : Controller
{
    [MvcTools.Actionfilter.MyLoggerActionFlt]
    public ActionResult Index()
    {
       return View();
    }
    //...
}

Vordefinierte Filter

AuthorizeAttribute
Schränkt den Zugriff auf Actions nur für authentifizierte Benutzer ein Details hier
HandleErrorAttribut
Definiert die Views, auf die im Falle zu definierender Ausnahme umzuleiten ist, um die Ausnahme zu dokumentieren. Die Ausnahme wird im ViewData- Dictionary bereitgestellt. In der web.config muss <customerrors mode="On" defaultredirect="Error"/> eingestellt sein. Details hier
OutputCacheAttribute
Definiert, wie die Ausgaben von Actions gecacht werden. Request mit gleichen Parametern können dann über eine zu definierende Zeitspanne, mit einer für die Parameter usprünglich gerenderten Kopie aus dem Webserver- Cache beantwortet werden. Details hier

Authentifizierung und Authorisierung

Einführung in die Konfiguration der Authentifizierung

Zugriff auf Actions einschränken

[Authorize]

Nur angemeldete Benutzer dürfen diese Action aufrufen

[Authorize(Roles="A, B")]

Nur Benutzer, die zur Rolle A oder B gehören, dürfen die Action aufrufen.

[AllowAnonymous]

Alle Benutzer dürfen diese Action aufrufen

Claim Based authorization

Controller- Actions aufrufen

Der Controller ist eine Klasse, die Methoden besitzt, welche mittels Routing über URL und HTTP- Requests von einem Webclient gestartet werden können. Diese Methoden werden Actions genannt. Eine Action verarbeitet den Requests:

  1. indem der Querystring oder die Formulardaten validiert werden
  2. die validierten Daten an die Parameter der Action gebunden werden
  3. die Action mit den gebundenen Parametern aufgerufen wird
  4. die Action ein Modell mit Ergebnisdaten erzeugt und es an eine View zum rendern in HTML übergibt

Validierbare Einschränkungen an Modellen definieren

→ Daten Annotationen definieren mittels System.ComponentModel.DataAnnotations
public class DataCollection
{
   [System.ComponentModel.DataAnnotations.Required(ErrorMessage= "X ist erforderlich")]
   [System.ComponentModel.DataAnnotations.Display(Name="X", Description= "z.B. Nr. od. Zeitpunkt der Messung")]        
   public double newX { get; set; }
   [System.ComponentModel.DataAnnotations.Required(ErrorMessage = "Y ist erforderlich")]
   [System.ComponentModel.DataAnnotations.Display(Name="Y", Description = "Messwert")]        
   public double newY { get; set; }
   // ...
}

Formulardaten validieren und an Parameter einer Action binden

Achtung: Die Validierung fuktioniert nur unter folgenden Vorausetzungen:
  1. Ein Modell wurde definiert, dessen Eigenschaften mittels System.ComponentModel.DataAnnotation Attribute eingeschränkt wurden
  2. Die Action nimmt die zu verarbeitenden Daten als Modell entgegen (z.B. public ActionResult AddValue(Models.StatCalcWithSessionState.DataCollection newData)) und nicht als einzelne Parameter (z.B. public ActionResult AddValue(double newX, double newY))
  3. Die Clientseitige Validierung in der View wurde abgeschaltet (ist fehlerhaft), durch HtmlHelper.ClientValidationEnabled = false;
Validierung für eine Action unterbinden
/// Löscht einen Messwert
/// Die Validierung wird unterbunden, um das Löschen auch bei unkorrekten Eingaben in den
/// Eingabefeldern zu ermöglichen.
[ValidateInput(false)]
public ActionResult DelValue(int id)
{
   Mem.Values.RemoveAt(id);
   return View("Index", Mem);
}

Ergebnis via View oder Json an Client senden

→Typen der Rückgabewerte von Actions.

Views

View mit RAZOR programmieren

→Einführung in die serverseitige RAZOR Scriptsprache für den Aufbau von Views.

Url in RAZOR analysieren

Sollen Links auf Ressourcen der MVC- Anwendung in eine View eingebettet werden, dann setzt dies Wissen über den Host und den Anwendungsordner voraus. Begint man einen URL in einem html Link mit der Tilde ~, dann ersetzt RAZOR diese durch den Host und den Anwendungsordner automatisch.

In manchen Fällen müssen URL's in einer View aufwendiger berechnet werden. Hier helfen dann folgende Funktionen:
Ein URL bestehe aus den Partikeln Schema://Host/Anwendungsordner/Pfad?Querystring#Fragment/Anker

Request.Url.Scheme
Bestimmt das Schema
Request.Url.Authority
Bestimmt den Host
Url.Content("~/")
Bestimmt den Anwendungsordner

HTML- Helper DisplayFor, EditorFor ...

Vorlagen (Templates) für die Helper DisplayFor und EditorFor

Das Rendern Modelleigenschaften in HTML durch die Helper kann mittels partieller Views, Vorlagen genannt, beeinflusst werden, die in spezielle beannten Orndern untergebracht werden:

Ordner DisplayTemplates
Enthält alle Vorlagen, die DisplayFor vor zum Rendern in HTML einsetzt. Die Dateinamen sollten mit dem Typnamen von Modellen übereinstimmen, für die eine Renderforlage definiert wird (Konvention vor Konfiguration). Sind die Modelle von elementaren Typ wie Double oder String, dann sollten die Vorlagen Double.cshtml bzw. String.cshtml heißen (Bennenung von Datentypen in VB.NET!)
Beispiel: Inhalt einer Double.cshtml- Vorlage, welche die Anzeige auf drei Nachkommastellen beschränkt
@*
    Allgemeine Vorlage für die Darstellung von double Werten.
    Negative Werte werden rot eingefärbt.
*@
@model double
<span style="color: @if (Model < 0)
                    { <text>#FF0000;</text>}
                    else
                    { <text>#000000;</text> }">
      @string.Format("{0:0.####}", Model) < /span>
        
Ordner EditorTemplates
Enthält alle Vorlagen, die EditorFor zum Rendern in HTML einsetzt. Die Dateinamen sollten wie DisplayTemplates mit den Typnamen von Modellen übereinstimmen.
Die Editor- Templates sind komplexer, da Metadaten zum Modell abgerufen werden müssen, um die id- und name- Attribute korrekt zu setzen. Diese Metadaten sind im ViewData- Objekt der partiellen View abgelegt wie folgendes Beispiel zeigt einer String.cshtml Vorlage zeigt:
@model String
        <div<
        <input type="text" id="@ViewData.ModelMetadata.PropertyName" name="@ViewData.ModelMetadata.PropertyName" value="@Model" class="form-control" /<
        </div<

Clientseitige Scripte einbinden

→ ASP.MVC\MVC.Intro\8. Diagramme im Browser: JQPlot und Datenabruf mittels Ajax
→ ASP.MVC\MVC.Intro\9. Upload eines Bildes für einen Himmelskörper (HTML 5 File API)
→ CanvasScriptServer

Globalisierung und Lokalisierung

Implementierung der Dependency Injection in ASP.NET MVC

→ Projekt CanvasScriptServer