3., aktualisierte Auflage
Moderne Webanwendungen für
.NET-Entwickler
Server-Anwendungen, Web APIs, SPAs & HTML-Cross-
Platform-Anwendungen mit ASP.NET,
ASP.NET Core, JavaScript, TypeScript & Angular
mit Beiträgen von Dr. Holger Schwichtenberg,Jörg Krause, Dr.Joachim Fuchs,
Sebastian Kleinschmagerund Manfred Steyer
Inhalt
Vorwort zur 3. Auflage XXIII
Warum dieses Buch? XXIII
Was ist der Inhalt dieses Buchs? XXIV
Welche Voraussetzungen sollten Sie für dieses Buch mitbringen? . .XXV
Was ist das Ziel des Buchs? XXV
Welche Versionen werden in diesem Buch behandelt? XXVI
Welche Programmiersprache wird in diesem Buch verwendet?....
XXVII
Welche Werkzeuge werden in diesem Buch verwendet? XXVII
Welche Sprachversion wird in diesem Buch verwendet? XXVII
Woher bekommen Sie die Code-Beispiele und die drei
Bonuskapitel zu diesem Buch? XXVIII
Wem ist zu danken? XXX
Die Autoren XXX
TeilA Web-Basiswissen 1
1 Protokolle, Standards und Konzepte 3
Standardisierung 3
RFCs 3
World Wide Web Consortium (W3C) 4
European Computer Manufacturers Association (ECMA) 4
Hypertext Transfer Protocol (HTTP) 4
Protokollaufbau, Header, Body 5
Kommandoaufbau 6
Die HTTP-Statuscodes 7
Ablauf einer HTTP-Kommunikation 7
Kopffelder 8
HTTP 2.0 9
Ergänzende Standards zu HTTP' 10
Web-Sockets 10
WebDAV 11
I V
Simple Mail Transfer Protocol (SMTP) oderExtended SMTP (ESMTP) 11File Transfer Protocol (FTP) 11REpresentational State Transfer (REST) 12Webdienste
12Merkmale
12
REST-Beispiel13
URI14
HTTP-Methoden für REST15
Multipurpose Internet Mail Extensions (MIME) 16JavaScript Object Notation (JSON) 17Atom Syndication Format (ATOM) 18Grenzen von REST: GraphQL und OData 19
Single Page Application (SPA) 19Asynchronous JavaScript and XML (AJAX) 20Responsive Web Design (RWD) 21
2 Hypertext Markup Language (HTML) 23Grundlagen HTML
23Geschichte
23XML - Grundlage für HTML
24
Markup25
XML-Dokumente25
Verarbeitung 26Der Begriff »Markup« 26
Seitenaufbau29
Document Object Model (DOM) 30Der Dokumenttyp (Doctype) 30Codierungen 30HTML5-Seitenstruktur
31Elemente der Seite
34Textelemente
34Fließ textauszeichnung 36Verweise
37Tabellen
37Multimedia und Grafiken 38Formulare
38
Skripte 39Interaktive Elemente
39Allgemeine und universelle Attribute 39
id40
class40
accesskey 41contenteditable
41contextmenu
42
VI | Inhalt
dir42
draggable 42
dropzone 43hidden
43lang
43spellcheck 43style
44tabindex
44title
44
3 Cascading Style Sheets (CSS) 45Grundlagen 45Syntax 46Selektor
47Elemente (Tags) 47ID
47Klassen
47Attribute
48Logische Auswahl
48Weitere Selektoren
48Das Box-Modell
51Bausteine der Box
52Zählweise
53Ausnahmen
53Das Box-Modell in CSS3 53
Das Flexbox-Modell53
Prinzipien 53Eigenschaft der Container 55
Beachtung von Medien56
Syntax56
Parameter59
Der Viewport 63Viewport einstellen
63Parameter für den Viewport 65
Einheiten65
Absolute Einheiten66
Relative Einheiten67
4 Bootstrap 69Einführung in Bootstrap 69Neuerungen in Bootstrap 4 69Installation
70Struktur der CSS-Dateien 72Seitenaufbau
73
Browserunterstützung 74
Inhalt | VII
ARIA75
Optimierung 76Hilfsklassen
78Reboot
78Struktur der Seite 79Einführung 79Das Rastersystem 80Das Flex-Raster
89Typografie 94Überschriften
95Text und Textelemente 96Listen
101Tabellen
103Hilfsklassen
112Formulare
114Struktur eines Formulars 114Eingabeelemente 124Schaltflächen
139Weitere Bausteine
144
Symbole 144
Responsive Bilder 148
Eingebettete Quellen 149Farben und Hintergründe 149
Ausrichtung von Elementen im Fluss 151Inhalte anzeigen und verstecken 152
Komponenten 152Klappmenüs (dropdown) 153
Werkzeugleisten (toolbar) 156Schaltfläche mit Menü (button group) 159
Navigation (nav, navbar) 162
Pfadnavigation (breadcrumb) 170Seitenweises Blättern (pagination) 171
Kennzeichnungen (tag) 173Großbildleinwand (jumbotron) 175Seitenüberschriften (page header) 176
Meldungen (alert) 177Fortschrittsbalken (progress) 178Medien (media) 182Allgemeine Listen (list group) 183Karten (cards) 187
Aktive Komponenten 197
Einrichtung und Aktivierung 197Die Programmierschnittstelle 198
Übergänge (transition) 199Modale Dialoge (modals) 200
VIII | Inhalt
Klappmenü (dropdown) 208
Scrollbar-Überwachung (scrollspy) 209Angeheftete Navigation (affix) 211Umschaltbare Tabulatoren (tab) 211
Tooltips (tooltip) 213
Inhaltsüberlagerung (popover) 216
Meldungen (alert) 219Interaktive Schaltflächen (button) 220Inhaltseinblendung (collapse) 221Bilderkreisel (carousel)
225
Teil B Webserverprogrammierung mit ASP.NET 229
5 ASP.NET MVC231
Geschichte und Verbreitung von ASP.NET 231Architektur von ASP.NET MVC 232
Erste Schritte mit ASP.NET MVC 233ASP.NET-MVC-Projekt anlegen 233Projektaufbau
235Nuget-Pakete
236Controller anlegen 238View anlegen
240Webanwendung testen 245Einträge editieren
246
Vorschlagswerte über Drop-down-Listenfeider anbieten 251Controller
254Models entgegennehmen 254View auswählen
256Auf Ausnahmen reagieren 257URL-Mapping beeinflussen (Routing) 257Asynchrone Controller
260Vereinfachte Implementierung asynchroner Controllerseit .NET 4.5
261Views
262Razor
262Razor-Helper 265Layoutseiten
265Partielle Views
267Vorlagen für Felder und Models 269Views für mobile Anwendungen 272Zwischen unterschiedlichen Ansichten wechseln 273Minification und Bundling 274
Inhalt | IX
Models275
Metadaten im Model festlegen 275HTML-Text übermitteln
276Validieren von Benutzereingaben 276
Globalisierung 282Sprach- und Ländereinstellungen festlegen 282Über Ressourcedateien mehrsprachige Inhalte bereitstellen 284Codierung festlegen 285
Areas286
Filter288
Überblick289
Umsetzung 289Filter auf Controller und Action-Methoden anwenden 291Globale Filter
292
Authentifizierungsfilter 292
6 ASP.NET Web API295
Einen einfachen HTTP-Service erstellen 295Parameter und Rückgabewerte 296HTTP-Services konfigurieren 298HTTP-Services mit Fiddler testen 300
Mehr Kontrolle über HTTP-Nachrichten 301Antworten mit HttpResponseMessage beeinflussen 301Anfragen als HttpRequestMessage darstellen 303
HttpRequestMessage und HttpResponseMessage am BeispielConditional Get
304Antworten über IHttpActionResult zurückgeben 305
HTTP-Services über HttpClient konsumieren 306
Routing 309Benutzerdefinierte Routen über die Konfiguration festlegen 309Attributbasiertes Routing 310
Weiterführende Schritte mit der Web API 313
Dynamische Parameter314
Tracing 315
Request Batching 316Cross Origin Resource Sharing (CORS) 318Validieren
319Querschnittsfunktionen implementieren 320
Message-Handler 320Filter
323
Filterüberschreibungen 330Benutzerdefinierte Formate unterstützen 330Formatter implementieren 331Formatter mit HttpClient verwenden 333
X | Inhalt
Serialisierung beeinflussen334
JSON-Serializer konfigurieren 334XML-Serializer konfigurieren 335Eigenschaften von der Serialisierung ausschließen 335Zirkuläre Referenzen serialisieren 336BinaryJSON (BSON) 338
Web API und HTML-Formulare 338Einfache Formularfelder übermitteln 338
Datei-Upload via HTML-Formular 339Fortschritt ermitteln
341
Feingranulare Konfiguration 343Controllerbasierte Konfiguration 343Routenbasierte Konfiguration 344
7 ASP.NET SignaIR 345Long-Polling 345Web-Sockets
346Überblick über ASP.NET SignaIR 347PersistentConnection
348Erste Schritte mit SignaIR und PersistentConnection 348
Lifecycle-Methoden 349URL-Mapping für persistente Verbindungen 349Einfacher Client für eine persistente Verbindung 350Einfacher JavaScript-Client für eine persistente Verbindung 351
Hubs353
Methoden und Callbacks mit SignaIR und Hubs 353
URL-Mapping für Hubs 355Lifecycle-Methoden
355Hubs konsumieren
355Hubs über JavaScript konsumieren 357
Gruppen 361Pipeline-Module für Querschnittsfunktionen 362SignaIR konfigurieren 364Cross Origin Resource Sharing (CORS) 364SignaIR skalieren
364
Überlegungen zum Skalieren von SignaIR 365SignaIR mit SQL Server skalieren 366
Implementierung eines SignalR-Clients 368Das Skalierungsszenario testen 369Azure Service Bus und Redis als Alternative zu SQL Server 370
Inhalt | XI
8 ASP.NET-Programmierschnittstellen 371Direkt mit HTTP interagieren 371HttpContext
371Server (HttpServerUtility) 373Request (HttpRequest) 374Response (HttpResponse) 376
Zustandsverwaltung auf Sitzungsebene 377Überblick
378Weitere Optionen 379Programmieren mit dem Sitzungszustand 380URL-basierte Sitzungsverwaltung ohne Cookies 380Konfiguration des Sitzungszustands 381Speicherort der Sitzungstabelle wählen 382
Komprimierung des Sitzungszustands 383Deaktivieren des Sitzungszustands 383
Caching383
Überblick384
Pro und Contra der Zwischenspeicherung 384Zwischenspeicherung ganzer Seiten (Output-Caching) 385
Caching von Seitenteilen (Fragmentzwischenspeicherung) 387Programmatisches Caching 388
Cacheinvalidierung 389
Teil C Webserverprogrammierung mit ASP.NET Core 393
9 Einführung in ASP.NET Core 395Klassisches ASP.NET oder ASP.NET Core? 395
Einführung in die Core-Welt 396.NET Standard
397Windows Compatibility Pack für .NET Core 402Open Source
405Dokumentation
405Werkzeuge 408
Kommandozeilenwerkzeug dotnet 408Editoren
410Erste Schritte mit ASP.NET Core (auf .NET Core) 410
Installation410
Projekt anlegen 411Projektaufbau 414Die Klasse Program 415Klasse Startup und Middleware 418
XII | Inhalt
Referenzen/Pakete420
Übersetzen und Debugging 423Deployment 426
ASP.NET Core auf dem klassischen .NET Framework 429Einsatzszenarien
429
Anlegen von ASP.NET-Core-Projekten mit demklassischen .NET Framework 430
Projektaufbau 430Referenzen/Pakete
432
Deployment 433In ASP.NET Core integrierte Webserver: Kestrelversus HTTP.sys (WebListener) 435Kestrel
435
HTTP.sys 436
10 ASP.NET Core MVC und Razor Pages 439POCO-Controller
440Controller und View
441Tag Helper 442Wie funktionieren Tag Helper? 442Eingebaute Tag Helper 443Eigene Tag Helper 444Beispiel: Tag <autor>
445Beispiel: Tag <row>
446Beispiel: Tag <condition>
448Beispiel: Tag <repeater> 448
View Components 450Razor Pages 452Von Webforms über MVC zu Razor Pages 453Razor Pages versus MVC 454
Page Model als Code-Behind 455URL-Parameter
456
Eingebaute Objekte 458Datenbindung 459
Praxisbeispiel zu Razor Pages 460Drittanbieterkomponenten für ASP.NET Core 468
11 ASP.NET-Core-Klassenbibliotheken 469Dependency Injection in ASP.NET Core 470Implementierung eines Diensts 471
Registrierung von Diensten 472Injektion in einen Konstruktor 473Manuelle Beschaffung 473Injektion in eine View
474Vordefinierte Dienste der ASP.NET-Core-Infrastruktur 474
Inhalt | XIII
Konfiguration in ASP.NET Core475
Sitzungen in ASP.NET Core477Cookies480
URL-Rewriting in ASP.NET Core480
Benutzerverwaltung und Authentifizierung 483
12 ASP.NET Core Web APIs487
Die Grundlagen von ASP.NET Core Web API 487Abfragen von Daten
487Arbeiten mit Statuscodes
490Anlegen, Aktualisieren und Löschen von Daten 491Nutzung von Sub-Routen für Teil-Ressourcen
494Nutzung weiterer Model-Binding-Funktionen 495Anbieten unterschiedlicher Repräsentationen von Ressourcen.
. . 497Nutzung des PATCH-Verbs mit JSON-Patch 497Cross Origin Resource Sharing 499Bereitstellung von OpenAPI-Beschreibungen über Swagger 501Starten von Hintergrundprozessen über IHostedService 504Integrationstests mithilfe des TestHosts
505Service-Kommunikation mit HttpClient 506Abfragen von Daten
506Versenden von Daten und Reaktion auf Statuscodes 508Arbeiten mit Headern und HttpRequestMessage 509Generieren von Clients für Swagger-Spezifikationen 509
Ausblick auf Neuerungen durch ASP.NET Core 2.1 510Annotation [ApiController]
510ActionResult<T>-Rückgabewerte
511Optimierte Input-Verarbeitung 511
13 Microservices mit ASP.NET Core Web API und RabbitMQ 515Grundlagen von Microservices
515Mögliche Vorteile von Microservices
517Mögliche Nachteile von Microservices
518Modellierung von Microservices
519Integration und Kommunikation von Microservices 520Synchrone und asynchrone Kommunikation 520Messaging-basierte versus Request-Response-Kommunikation
. . 521Gesteuerte (orchestriert) versus Event-getriebeneKommunikation (choreografiert) 522
.NET-Core-Technologien zur Umsetzung von
Service-Kommunikation523
Asynchrone Service-Kommunikation über RabbitMQ 523Microservices-Fallstudie
530Umgebung und fachlicher Kontext
531Der HumanResourcesService
532
XIV | Inhalt
Der ProjectsService 534Der ManagementDashboardService 543Der InvoicingService 545Fazit
550Nützliche Patterns und Best-Practices im Bereich Microservices
. . . 550Resilienz-Patterns
551
Serviceübergreifender Code und serviceübergreifende Funktionen 558
14 ASP.NET CoreSignaIR 561Hub-Klassen
561Hub-Client mit .NET Core 2.1 563Hub-Client mit Angular 564
Serverseitig initiierte Benachrichtigungen und Gruppen 569
Teil D Web-Client-Programmierung 575
15 JavaScript-Grundlagen 577Grundlagen der Sprache 577Sprachmerkmale und Entwurfsmuster 578Vergleich mit Programmiersprachen 578
JavaScript-Syntax 578Typen 582Objekte
593Symbole 594Arrays 594Operatoren
596Anweisungen - Statements
598Fehlerbehandlung 604Variablen und Scope 606
Objektorientierung 607Erstellen von Objekten 607Klassen
609Statische Mitglieder 615
Vererbung 615Exkurs Objekthierarchie 619Ableiten von internen Typen 625Tipps zum Umgang mit objektorientierten Techniken 625
Globale Standardfunktionen626
Timer-Funktionen626
Prüffunktionen627
Konvertierungsfunktionen 627Module
628Entwurfsmuster
628Module
635
Inhalt | XV
Funktionen635Pfeilfunktionen (Lambdas)635Erweiterte Objektliterale638Destrukturierung638Umgang mit Argumenten639Generatoren und Iteratoren640Asynchrone Programmierung643Klassische asynchrone Programmierung 643Promise650Set und Map654Set654Map656
Schlüsselvergleiche656Iteratoren657WeakMap und WeakSet658Reguläre Ausdrücke658Einführung658Kopieren oder Konstruieren?659Und wie funktioniert das?659Gruppierungen668Vorwärtsreferenzen669Die JavaScript-Funktionen670
Zusammenfassung674Reflektions-API676Einfache Methoden676Reflect676Erzeugerfunktionen677Operatoren für Schlüsselwörter677
Dynamische Argumentlisten678Funktionsaufrufe678Proxy-Fallen678
Zusammenfassung der Reflect-Methoden679Stellvertreter: Proxies680Einführung680Proxy-Fallen anwenden681
Schemaprüfung mit Proxies683Entfernbare Proxies684Übersicht685
16 TypeScript687Geschichte von TypeScript687
Open-Source-Projekt688
TypeScript-Compiler688Übersetzung von TypeScript in JavaScript 689TypeScript Playground690
XVI | Inhalt
TypeScript in Visual Studio 691
TypeScript-Kommandozeilencompiler tsc 694TypeScript in Visual Studio Code 695TypeScript in Gulp 696Datentypen 698Arrays und Tupel 700Klassen
701Generische Klassen 703Strukturelle Typäquivalenz (Duck Typing) 704Funktionen und Lambda-Ausdrücke 704Dekoratoren
706Module und Verweise 707TypeScript ohne externes Modulsystem (interne Module) 707Externe Module 708Re-Export 710
Deklarationsdateien710
Einbindung von Deklarationsdateien (altes Verfahren) 711
Import von Deklarationsdateien 711Deklarationsdateien und tsconfig.js 711
Mixins712
Mixin-Konstruktortypen 714Deklaratives Mischen
715Module mischen
716Nicht mögliche Vermischungen 719
Reflektion: Metadaten per Programmcode 719Die Metadaten-API für Reflektion 720Ermitteln von Typinformationen 720Ermitteln von Parameterinformationen 721Ermitteln von Rückgabeinformationen 721
Asynchrone Programmierung 721Generatoren und Iteratoren 722
Iteratoren722
Generatoren723
Asynchrone Iteration 723Asynchrone Generatoren
724
17 Angular 725Ziele und Architektur von Angular 725Browserunterstützung 726
Veröffentlichungszyklus von Angular 727Dokumentation
728Beispielsammlung 729Komponenten
731
Datenbindung und Pipes 734Syntaxübersichten
736
Inhalt | XVII
Strukturelle Direktiven736
Datenbindungssyntax737
Angular-Pipes737
Module738
Formulare739
Routing742
Dienste und Dependency Injection 744Animationen
745Werkzeuge
745JiTvs. AOT
746Angular Universal
748
18 ASP.NET Blazor749
Silverlight wurde eingestellt749
WebAssembly749
Architektur von Blazor750
Erste Schritte mit ASP.NET Blazor751
Beispielprojekt752
Weitere Möglichkeiten755
Ausblick755
Teil E Hosting von ASP.NET und ASP.NET Core 757
19 Internet Information Services (IIS) 759Versionsgeschichte
759Kernfunktionen des IIS
760Installation des IIS
761Modularisierung
763Skriptbasierte Installation
764Integration zwischen ASP.NET und IIS 765Test der Installation
765IIS Express
766IIS-Administration
767IIS-Manager
768Administration per Kommandozeile und Skript 769
IIS-Websites (virtuelle Webserver) 769Websites erstellen
770Websites erstellen per Skript 771Wichtige Einstellungen für Websites
773Beschränken der möglichen Clients
773Authentifizierung
774Transport Layer Security (TLS)/Secure Socket Layer (SSL) 775
XVIII | Inhalt
Server für Nicht-HTTP-Protokolle 777Virtuelle Verzeichnisse im IIS 777
IIS-Anwendungen 779
Rahmenbedingungen einer IIS-Anwendung 779
Anlegen einer IIS-Anwendung 780
IIS-Anwendungspools 781Eigenschaften eines Anwendungspools 781Liste der Anwendungspools 782Zuordnung von Websites und IIS-Anwendungenzu Anwendungspools 782ASP.NET-Version
783Erweiterte Einstellungen für Anwendungspools 784Anwendungspoolidentität 785
Wiederverwendung (Recycling) 785
Leistungseinstellungen 786
Zustandsüberwachung 787Besonderheiten für ASP.NET-Anwendungen 787
IIS-Autostart787
IlS-Verarbeitungspipeline 790
20 Microsoft Azure793
Azure-Konzepte 793
Anlegen einer Subscription 794Anlegen einer Ressource Group 794
Anlegen eines App Service Plans 795Anlegen eines Azure App Service 796
Anlegen eines Azure App Service mit der PowerShell 799
21 Verteilen von Webanwendungen aus Visual Studio heraus 801Web Deploy-Werkzeug 801Web Deploy in einen IlS-Webserver 802Web Deploy nach Azure
804Konfigurationstransformationen
805Erstellen der Transformationsdateien 805Syntax der Transformationsdateien 805
Ergebnis der Transformation 807Continuous Integration und Continuous Delivery 807
22 Webanwendungen in Docker809
Docker auf Windows809
Installation der Docker-Unterstützung von Microsoft 811Installation von Docker for Windows 813Ein Image beschaffen
814Einen Container starten
815Ein Visual-Studio-Container-Projekt erstellen 816
Inhalt | XIX
Debugging eines Containers 817
Verwendung des Containers 817
Images aus Containern erstellen 821.NET Core-Container 821
Container in Windows Server 2016 hosten 824
Images verbreiten 825
Teil F Fallbeispiel: MiracleList 829
23 Das Fallbeispiel »MiracleList« 831
Das Szenario 831Links 834
24 DasMiracleList-Backend 835
Architektur 837
Entitätsklassen 840
Entity Framework Core-Kontextklasse 842
Lebensdauer der Kontextklasse in ASP.NET Core-Anwendungen. . 843
Geschäftslogik 844
Web API 853
25 MiracleList-Web-Client 865
Technikeinsatz im Web-Client 865
Angular-CLl 866Webserver starten 868
Zusatzkomponenten 869
Proxy für REST-Dienste 870
Daten darstellen 871
Navigation zu den Aufgaben 873
Datumsanzeigen 876Zeilenumbrüche 878
Aufgabenstatus ändern 878
Aufgaben anlegen 881
Suchfunktion 882
Komponentenbildung 883
Schritt 1: Routing-Modul 885Schritt 2: Kommunikationsdienst 885
Schritt 3: Teilaufgabenliste in SubTaskList-Komponente 886Schritt 4: Auslagerung in TaskView 888
Schritt 5: Aufgaben bearbeiten 890Schritt 6: Integration in AppComponent 891
XX | Inhalt
Datepicker 892Kontextmenü verwenden 893Nachfragen beim Löschen 896Animationen 897Sortieren der Aufgabenliste 898
Benutzeranmeldung 899Hauptmenü 901Testen
902Auslieferung 905
26 MiracleList-Electron-Client907
Hybride Apps 908Architektur von Electron 908
Electron-Projekt anlegen 909Kommunikation zwischen Main und Renderer 918
Erweiterungen in der Webanwendung 918Start der Electron-Anwendung 921
Debugging 922Deployment 923
27 MiracleList-Cordova-Client925
Architektur von Cordova926
Cordova-Projekt anlegen 927Cordova-Anwendung starten 929
Erweiterungen in der Webanwendung 930Cordova-APIs verwenden 931Plug-ins verwenden 932
Responsive Web Design mit Bootstrap 935
Index937
Inhalt | XXI
Top Related