Log In
Or create an account ->
Imperial Library
Home
About
News
Upload
Forum
Help
Login/SignUp
Index
Moderne Webanwendungen mit ASP.NET MVC und JavaScript: ASP.NET MVC im Zusammenspiel mit Web APIs und JavaScript-Frameworks
Vorwort
Für wen dieses Buch gedacht ist
Zielsetzung des Buchs
Unterschiede zur ersten Auflage
Typografische Konventionen
Behandelte Versionen
Express-Editionen
Verwendete Programmiersprache
Sprachversion
Leserservice
Danksagungen
Über www.IT-Visions.de
Über den Autor Manfred Steyer
Über den Autor Dr. Holger Schwichtenberg
1. ASP.NET MVC
Architektur
Model-View-Controller (MVC)
Überblick über MVVM (Model-View-ViewModel)
Erste Schritte mit ASP.NET MVC
ASP.NET MVC-Projekt anlegen
Modell anlegen
Controller anlegen
View anlegen
Webanwendung testen
Einträge editieren
Vorschlagswerte über Dropdown-Listenfelder anbieten
Controller
Models entgegennehmen
View auswählen
Auf Ausnahmen reagieren
URL-Mapping beeinflussen (Routing)
Asynchrone Controller
Vereinfachte Implementierung asynchroner Controller ab .NET 4.5
Views
Razor
Razor-Helper
Layoutseiten
Partielle Views
Vorlagen für Felder und Models
Views für mobile Anwendungen
Zwischen unterschiedlichen Ansichten wechseln
Minification und Bundling
Models
Metadaten im Model festlegen
HTML-Text übermitteln
Validieren von Benutzereingaben
Manuelles Validieren
Deklaratives Validieren
Validierungsattribute
Validierungsattribute in Metadatenklassen auslagern
Benutzerdefinierte Validierungsattribute
Serverseitige deklarative Validierung
Clientseitige Validierung
Remotevalidierung
Validieren unterbinden
Globalisierung
Sprach- und Ländereinstellungen festlegen
Über Ressourcedateien mehrsprachige Inhalte bereitstellen
Codierung festlegen
Areas
Filter
Überblick
Umsetzung
Filter auf Controller und Action-Methoden anwenden
Globale Filter
Authentifizierungsfilter
2. ASP.NET Web API
REST, WebAPIs und HTTP-Services
Einen einfachen HTTP-Service erstellen
Parameter und Rückgabewerte
HTTP-Services konfigurieren
HTTP-Services mit Fiddler testen
Mehr Kontrolle über HTTP-Nachrichten
Antworten mit HttpResponseMessage beeinflussen
Anfragen als HttpRequestMessage darstellen
HttpRequestMessage und HttpResponseMessage am Beispiel Conditional Get
Antworten über IHttpActionResult zurückgeben
HTTP-Services über HttpClient konsumieren
Routen
Benutzerdefinierte Routen über die Konfiguration festlegen
Attributbasiertes Routing
Weiterführende Schritte mit der Web-API
Dynamische Parameter
Tracing
Request Batching
Cross Origin Resource Sharing (CORS)
Validieren
Querschnittsfunktionen implementieren
Message-Handler
Einen Handler umsetzen
Handler mit HttpClient verwenden
Filter
Überblick
Filter umsetzen
Filter als Attribute einsetzen
Filter über FilterProvider bereitstellen
Filter als globale Filter registrieren
Interfaces für Filter
Authentifizierungsfilter
Filterüberschreibungen
Benutzerdefinierte Formate unterstützen
Formatter implementieren
Formatter mit HttpClient verwenden
Serialisierung beeinflussen
JSON-Serializer konfigurieren
XML-Serializer konfigurieren
Eigenschaften von der Serialisierung ausschließen
Zirkuläre Referenzen serialisieren
Binary JSON (BSON)
Web-API und HTML-Formulare
Einfache Formularfelder übermitteln
Dateiupload via HTML-Formular
Fortschritt ermitteln
Feingranulare Konfiguration
Controllerbasierte Konfiguration
Routenbasierte Konfiguration
3. JavaScript-Frameworks
JavaScript als Multiparadigmen-Sprache
Die prozedurale Seite von JavaScript
Die funktionale Seite von JavaScript
Die objektorientierte Seite von JavaScript
Objekte mit JSON beschreiben
Konstruktorfunktionen
Objekte als Dictionaries
Vererbung
Elemente mit Namespaces organisieren
Ausgewählte vordefinierte Objekte
JSON-basierte Strings
Ausnahmen
Die modulare Seite von JavaScript
JavaScript debuggen
jQuery
Wrapper-Objekte
Selektion von Seitenelementen
Ereignisbehandlung mit jQuery
Modifizieren von Seitenelementen
Animationen
AJAX
ASP.NET MVC-Modelle mit jQuery Validate validieren
jQuery UI
jQuery Mobile
Logische Seiten
Dialogfelder
Navigationsleisten
Formularfelder
Listen
Twitter Bootstrap
Bewertung von Bootstrap
Von Bootstrap unterstützte Browser
Bootstrap-Dateien
Aufbau einer Bootstrap-basierten Webseite
Bootstrap-Grundlayout
Testseite für Bootstrap-Grundlayout
Verschachtelung
Ausblenden von Inhalten
Navigation
Formulare
Symbole
Sprechblasen
Abgerundete Grafiken
Weitere Möglichkeiten
Offlinefähige Webanwendungen mit HTML 5
Daten im Web Storage speichern
Datenbanken im Browser
IndexedDB
Mit IndexedDB arbeiten
Objekte mit IndexedDB speichern
Objekte mit IndexedDB laden
Repository einsetzen
Daten über Index abrufen
IndexedDB nachrüsten
Werkzeuge für IndexedDB
Anwendungsdateien im Browser speichern
Aufbau eines Cache-Manifests
Cache-Manifest dynamisch erzeugen
Cache-Manifest über JavaScript aktualisieren
Asynchronität und Hintergrundprozesse
Mit Promises asynchrone Aufrufe wartbar gestalten
Mit Web-Workern Aufgaben in den Hintergrund auslagern
Internationalisierung mit Globalize
modernizr
TypeScript
Typen und Variablen
Funktionen
Klassen
Strukturelles Sub-Typing
Generics
Module
Ambiente Deklarationen
4. AngularJS
AngularJS herunterladen und einbinden
MVC, MVP und MVVM mit AngularJS
Erste Schritte mit AngularJS
Definition eines Moduls und Controllers
Deklaration der View-Models
Datenbindung verwenden
AngularJS näher betrachtet
Direktiven
Datenbindung
Scopes
Dependency-Injection
HTTP-Services via AngularJS konsumieren
Angular-Services bereitstellen und konsumieren
Filter in AngularJS
Filter verwenden
Benutzerdefinierte Filter bereitstellen
Mit Formularen arbeiten
Objekte an Formularfelder binden
Form-Controller
Eingaben validieren
Fehlerhafte Eingaben mit CSS hervorheben
Auf Validierungsergebnisse programmatisch zugreifen
Benutzerdefinierte Validierungslogiken
Steuerelementbibliotheken für AngularJS
Logische Seiten und Routing
Logische Seiten mit ng-switch
Routing mit dem Modul ngRoute
Routing mit dem externen Modul UI-Router
Verschachtelte Views
Mehrere Views pro Vorlage verwenden
Parameter übergeben
Auf Zustände programmatisch zugreifen
AngularJS-Anwendungen testen
Anatomie eines Jasmine-Tests
Der Jasmine-Test-Runner
Ein View-Model testen
Asynchrone Tests
Controller testen
HTTP-Zugriffe für Tests mit angular-mock.js simulieren
Angular-Services für Tests simulieren
Filter testen
Direktiven testen
Benutzerdefinierte Direktiven
Eine erste (zu) einfache Direktive
Eigener Scope für Direktive
Isolierte Scopes
Link-Phase
Compile-Phase
Kommunikation zwischen Direktiven
5. ASP.NET SignalR
Long-Polling
Web-Sockets
Überblick über ASP.NET SignalR
PersistentConnection
Erste Schritte mit SignalR und PersistentConnection
Lifecycle-Methoden
URL-Mapping für persistente Verbindungen
Einfacher Client für eine persistente Verbindung
Einfacher JavaScript-Client für eine persistente Verbindung
Hubs
Methoden und Callbacks mit SignalR und Hubs
URL-Mapping für Hubs
Lifecycle-Methoden
Hubs konsumieren
Hubs über JavaScript konsumieren
Gruppen
Pipeline-Module für Querschnittsfunktionen
SignalR konfigurieren
Cross Origin Resource Sharing (CORS)
SignalR skalieren
Überlegungen zum Skalieren von SignalR
SignalR mit SQL Server skalieren
Implementierung eines SignalR-Clients
Das Skalierungsszenario testen
Azure Service Bus und Redis als Alternative zu SQL Server
6. Datenzugriff mit Entity Framework
Überblick
Mit dem Entity Data Model arbeiten
Entity Data Model anlegen
Entity Data Model aus bestehender Datenbank ableiten
Entity Data Model einsehen und bearbeiten
Entity Data Model nach Datenbankänderungen aktualisieren
Datenbank für Database First generieren
Daten abfragen
Auf Entitäten zugreifen
Ergebnismenge einschränken und sortieren
Ladestrategien
Vorzeitiges Laden – Eager Loading
Lazy Loading
Benachbarte Objekte nicht laden
Mit Entity SQL auf Datenbanken zugreifen
Tracing
Entitäten verwalten
Entitäten einfügen
Entitäten aktualisieren
Getrennte Objektgraphen aktualisieren
Entitäten löschen
Konflikte erkennen und auflösen
Optimistische Konflikterkennung
Konflikte bei optimistischer Konflikterkennung auflösen
Pessimistische Konflikterkennung
Mit Transaktionen arbeiten
Transactionen mit TransactionScope
Transaktionen über DbContext steuern
Erweiterte Mapping-Szenarien
Komplexe Typen
Enumerationen
Vererbung
Polymorphe Abfragen
Table per Hierarchy (TPH)
Table per Type (TPT)
Type per concrete Type (TPC)
Tabellen zu einer Klasse zusammenfassen
Klasse auf ausgewählte Datensätze einer Tabelle abbilden
Tabelle auf mehrere Klassen verteilen
Mit gespeicherten Prozeduren arbeiten
Gespeicherte Prozeduren zum Erzeugen, Aktualisieren und Löschen verwenden
Vollständige Parallelität mit gespeicherten Prozeduren
Mit gespeicherten Prozeduren Daten abrufen
Mit nativem SQL arbeiten
Codegenerierung anpassen
Code First
Erste Schritte mit Code Only
Standardkonventionen
Konventionen mit Fluent-API überschreiben
Konventionen mit Attributen übersteuern
Benutzerdefinierte Konventionen bei Code First
Konfigurationskonventionen (Configuration Conventions)
Modellbasierte Konventionen
Code First und Stored Procedures
Konventionen für das Abbilden von Entitäten auf Stored Procedures
Vollständige Parallelität beim Einsatz von Stored Procedures unter Code First
Aus Konventionen ausbrechen
Automatisches Migrieren von Datenbanken
Datenbasierte Dienste mit dem Entity Framework, ASP.NET Web API und OData
Daten mit OData flexibel abfragen
Mögliche OData-Abfragen einschränken
OData-Abfragen global aktivieren
OData-Abfragen manuell auswerten
Daten mit OData verwalten
Batching
7. Basisdienste im ASP.NET-Umfeld
Open Web Interface for .NET (OWIN) und Katana
Ideen hinter OWIN
Katana
Self-Hosting mit Katana
Erste Schritte mit Self-Hosting
Self-Hosting von ASP.NET Web API
Self-Hosting von ASP.NET SignalR
Leichtgewichtiger Webserver für das Self-Hosting
Eigene Middleware-Komponenten implementieren
Eigene Middleware-Komponenten in Form von Klassen bereitstellen
Eigene Middleware-Komponenten in Form von Delegaten bereitstellen
Direkt mit HTTP interagieren
HttpContext
Server (HttpServerUtility)
Request (HttpRequest)
Response (HttpResponse)
Zustandsverwaltung auf Sitzungsebene
Überblick
Weitere Optionen
Programmieren mit dem Sitzungszustand
URL-basierte Sitzungsverwaltung ohne Cookies
Konfiguration des Sitzungszustands
Speicherort der Sitzungstabelle wählen
Komprimierung des Sitzungszustands
Deaktivieren des Sitzungszustands
Caching
Überblick
Pro und Contra Zwischenspeicherung
Zwischenspeicherung ganzer Seiten (Output-Caching)
Zwischenspeicherungsprofile (Caching Profiles)
Caching von Seitenteilen (Fragmentzwischenspeicherung)
Programmatisches Caching
Cacheinvalidierung
Cacheinvalidierung durch die Datenbank
Cache Invalidation bei Microsoft SQL Server 7.0 und 2000
Beispiel auf Ebene von Action-Methoden:
Beispiel für die programmatische Anwendung:
Cacheinvalidierung bei Microsoft SQL Server ab Version 2005
8. Sicherheit
Gesicherte Übertragung mit SSL/TLS
SSL für ein Webprojekt in IIS konfigurieren
Digitale Zertifikate für Entwicklung ausstellen
SSL für Self-Hosting-Szenarien konfigurieren
SSL und Clients
Zugang zu Action-Methoden beschränken
Windows-Sicherheit unter Verwendung von HTTP-basierter Authentifizierung
HTTP-Sicherheit in IIS konfigurieren
HTTP-Sicherheit in ASP.NET konfigurieren
Windows-Sicherheit bei Self-Hosting
Windows-Sicherheit mit HttpClient
Mit Clientzertifikaten arbeiten
IIS konfigurieren
In Service auf Clientzertifikat zugreifen
Client für Authentifizierung mittels Clientzertifikat vorbereiten
Sicherheitszenarien mit ASP.NET Identity und Katana
Überblick über ASP.NET Identity
ASP.NET Identity verwenden
Überlegungen zur Implementierung eines eigenen UserStores
Formularbasierte Authentifizierung mit Katana
Überblick über die CookieAuthenticationMiddleware vor dem Hintergrund formularbasierter Authentifizierung
CookieAuthenticationMiddleware für formularbasierte Authentifizierung konfigurieren
Benutzer anmelden
Benutzer abmelden
Claims in Action-Methoden verwenden
Authentifzierung mit externen Identitätsanbietern, wie Google oder Facebook mit Katana
Middleware registrieren
Registrierte Login-Provider abrufen
Authentifizierung durch externen Login-Provider veranlassen
Weiterführende Konfigurationsmöglichkeiten
Benutzerdefinierte Authentifizierungs-Middleware-Komponenten mit Katana entwickeln
Überblick über Authentifizierungs-Middleware-Komponenten
Benutzerdefinierte Implementierung von HTTP BASIC
Umsetzung einer Middleware für HTTP BASIC
Einsatz als passive Authentifizierungs-Middleware
Kommunikation zwischen Anwendungscode und Middleware-Komponenten
Kommunikation zwischen Authentifizierungs-Middleware-Komponenten
Single-Sign-On und weiterführende Szenarien mit OAuth 2.0, OpenID Connect und Katana
OAuth 2.0
Rollen
Access- und Refresh-Token
Single-Sign-On mit OAuth 2 und OpenID Connect
JSON-Web-Token
Flows
Authorization Code Grant-Flow
Implicit Grant-Flow
Resource Owner Password Credentials Grant
Client Credentials Grant
Eine OAuth 2.0-Implementierung mit ASP.NET MVC 5 und ASP.NET Web API 2
Katana-Middleware-Komponenten für OAuth 2.0 registrieren
Datenformate
Einen OAuthAuthorizationServerProvider für den Resource Owner Password Credentials Grant implementieren
Den Resource Owner Password Credentials Grant testen
Neues Access-Token mit Refresh-Token anfordern
Via OpenID Connect ein Identitäts-Token ausstellen
Serviceaufrufer mit einem über OpenID Connect ausgestellten JWT authentifizieren
Authorization Code Grant und Implicit Grant implementieren
Weiterführende Überlegungen zur Authentifizierung des Benutzers beim Einsatz des Authorization Code Grants sowie Implicit Grants
Access-Token über Authorization Code Grant anfordern
Access-Token über Implicit Grant anfordern
Katana-Middleware für Single-Sign-On über Authorization Code Grant und OpenID Connect realisieren
Federated Security mit dem JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants
Implementierung des JWT Profile for OAuth 2.0 Client Authentication and Authorization Grants zur Realisierung von Verbundsicherheit
Authentifizieren von JavaScript-Clients mit OAuth 2.0
JavaScript-Client mit Resource Owner Password Credentials Grant authentifizieren
JavaScript-Client mit Implicit Grant authentifizieren
Single-Sign-On mit WIF
Verweis auf STS einrichten
Konfigurieren von ASP.NET-Projekten für den Einsatz mit WIF
Übermittelte Claims prüfen
Programmatisches Anfordern einer Anmeldung
Sitzungscookie für Claims erstellen
9. ASP.NET MVC und ASP.NET Web API erweitern
ASP.NET MVC erweitern
DependencyResolver
ModelBinder
ModelBinder anpassen
Validierende Modellbindung
ModelBinder auf traditionellem Weg registrieren
ModelBinder über DependencyResolver bereitstellen
ValueProvider
Benutzerdefinierter ValueProvider
ValueProvider mit ValueProviderFactories erzeugen
ValueProviderFactory über DependencyResolver bereitstellen
ModelValidatorProvider
Benutzerdefinierter ModelValidatorProvider
ModelValidationProvider auf traditionellem Weg bereitstellen
ModelValidationProvider über DependencyResolver bereitstellen
MetadataProvider
Ein einfacher MetadataProvider
MetadataProvider auf traditionellem Weg registrieren
MetadataProvider über DependencyResolver bereitstellen
Benutzerdefinierte Metadaten
Performanceverbesserung durch das Zwischenspeichern von Metadaten
View-Helper
View-Helper bereitstellen
Benutzerdefinierte View-Helper aufrufen
Mit View-Helper auf Modell zugreifen
Basisklasse für Razor-Views ändern
Action-Methoden mit ActionMethodSelectorAttribut auswählen
Benutzerdefinierte ActionMethodSelectorAttribut-Implementierungen bereitstellen
ActionMethodSelectorAttribute anwenden
ActionNameSelectorAttribute
Controller mit ControllerFactory auswählen
Benutzerdefinierte ControllerFactory
ControllerFactory auf traditionellem Weg registrieren
ControllerFactory und DependencyResolver
View-Engine
Benutzerdefinierte Pfade für Views mit benutzerdefinierter View-Engine
View-Engine auf traditionellem Weg registrieren
View-Engine über DependencyResolver bereitstellen
Benutzerdefiniertes Rendering mit benutzerdefinierter View-Engine
Benutzerdefiniertes ActionResult
ASP.NET Web API erweitern
Abhängigkeiten auflösen mit benutzerdefiniertem DependencyResolver
Methodenparameter auf benutzerdefinierte Weise mit HttpParameterBinding binden
Zusätzliche Assemblies mit AssembliesResolver laden
Service-Operationen über HttpActionSelector auswählen
Controller über HttpControllerSelector auswählen
10. Testbare Systeme mit Dependency-Injection
Fallbeispiel ohne Dependency-Injection
Implementierung mit ASP.NET MVC
Komponententests (engl. Unit Tests)
Diskussion der betrachteten Lösung
Fallbeispiel mit Dependency-Injection
Implementierung der Webanwendung
Brückenschlag zwischen ASP.NET MVC und Unity
Testen
Zusammenfassung und Fazit
Stichwortverzeichnis
Impressum
← Prev
Back
Next →
← Prev
Back
Next →