Einführung in ASP.NET Core Middlewares

Matthias Jauernig
Matthias JauernigSenior Web Developer
Matthias Jauernig
www.jauernig-it.de
matthias@jauernig-it.de
@JauernigIT
Frankfurt/Rhein-Main
Professionell. Individuell. Innovativ.
ASP.NET Core Middlewares
Matthias Jauernig
Sourcecode zum Vortrag
 https://github.com/JauernigIT/aspnetcore_middlewares
 Demo für Run/Use/Map
 Demo für Angular 4 mit ASP.NET Core inkl. 2 Middlewares (SPA Routing, Old Browser Detection)
 Demo für Response-Veränderung (Filtern von Schimpfwörtern)
26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 2
Matthias Jauernig
Wer ich bin
 Freiberuflicher Webentwickler/-architekt
 Raum Frankfurt / Rhein-Main
 10 Jahre Erfahrung in professioneller Softwareentwicklung
 C#/.NET, .NET Core, ASP.NET MVC, TypeScript, Angular 4, Kendo UI
Wie ich zu .NET Core komme
 Privat & aktuelles Projekt (Bank, öffentliche Webseite)
 Frontend: Single Page Application (SPA)
Backend: .NET Core als leichtgewichtige Hosting-Lösung
 20 genutzte Middlewares, davon 12 eigenentwickelt
26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 3
www.jauernig-it.de
Einleitung
Was ist eine Middleware?
26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 5
Argonne National Laboratory
CC BY-SA 2.0, @Wikimedia
?
Was ist eine Middleware?
Das ist eine Middleware:
26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 6
app.Run(async context =>
{
await context.Response
.WriteAsync("Hello World!");
});
Was ist eine Middleware?
Definition
“Middleware is software that is
assembled into an application pipeline
to handle requests and responses.”
26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 7
Quelle: ASP.NET Core Docs, Microsoft
Was ist eine Middleware?
ASP.NET Core Middleware  Request Delegate
26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 8
public Task Invoke(HttpContext context)
{
// do something
}
Demo Starter-Projekt
ASP.NET Core Middlewares
Basierend auf Best Practices der WebDev Community
 Node.js Express
 Rails on Rack
 …
Evolution aus OWIN Middlewares
 Konzept der Middleware-Pipeline zur Verarbeitung von Requests/Responses
 Einfacher als OWIN Middlewares (zusätzliche Abstraktionen), verbessertes DI
 Nutzbarkeit von OWIN Middlewares in ASP.NET Core (app.UseOwin())
26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 10
ASP.NET Core Middlewares
Ablösung von HTTP-Handlern und HTTP-Modulen
26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 11
Authorization
Module Andere Module
MVC
HTTP Handler
.report
HTTP Handler
Unauthorized
request
Request for
/Home/Index
Request for
/sales.report
Quelle: ASP.NET Core Docs, Microsoft
Middlewares vs. HTTP-Handler/Module
HTTP-Handler/Module
 Handler: Request-Verarbeitung abhängig von Dateiname/Dateiendung
 Module:
 für jeden Request ausgeführt
 Reihenfolge abhängig von Lifecycle Events und web.config
ASP.NET Core Middlewares
 Ablösung/Vereinheitlichung beider Konzepte
 Einfacher und verständlicher als HTTP-Handler/Module (keine magic classes)
 Pipeline-Definition und Reihenfolge per Code (keine magic web.config)
 Flexibilität in Pipeline-Aufbau (Verzweigungen, etc.)
26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 12
Middlewares verwenden
Die Request-Pipeline aufbauen
Request-Verarbeitung: Run()
 Request verarbeiten und direkt zurückkehren
26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 14
Run()
Die Request-Pipeline aufbauen
Request-Verarbeitung: Use()
 Request verarbeiten und nächste Middleware in der Pipeline aufrufen
26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 15
Use() Run()Use()
Die Request-Pipeline aufbauen
Request-Verarbeitung: Map()
 auf eine andere Pipeline verzweigen, abhängig von einer festgelegten Bedingung
26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 16
Run()Map()Use()
Use()
Use()
Demo Run, Use, Map
Die Request-Pipeline aufbauen
Ausführungsreihenfolge
26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 18
Quelle: ASP.NET Core Docs, Microsoft
Die Request-Pipeline aufbauen
Reihenfolge ist entscheidend!
 Verhalten: wird das Gewünschte getan?
 Sicherheit: wird zu viel Information preisgegeben?
 Performance: wird zu viel ausgeführt?
Verbesserung der Performance
 Häufig ausgeführte Operationen weiter oben
 Ressourcenintensive Operationen weiter unten
 Nur möglich, wenn Verhalten nicht beeinträchtigt wird
26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 19
Eingebaute Middlewares nutzen
 Authentication
 CORS
 Error Handling
 Response Caching
 Response Compression
 Routing
 Session
 File Server
 Static Files
 URL Rewriting
 MVC
 …
26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 20
Demo ASP.NET Core & Angular 4
Eigene Middlewares
Eigene Middlewares schreiben
Eigene Middleware-Klassen
26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 23
class SomethingMiddleware {
private RequestDelegate next;
public SomethingMiddleware(RequestDelegate next) {
this.next = next;
}
public async Task Invoke(HttpContext context) {
// do something ...
await next(context);
}
}
Eigene Middlewares schreiben
Best Practice: IApplicationBuilder Erweiterungsmethode
26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 24
static class IApplicationBuilderExtensions {
public static IApplicationBuilder
UseSomething(this IApplicationBuilder app) {
return app.UseMiddleware<SomethingMiddleware>();
}}
 „Factory-Methode“ zur Erzeugung der Middleware
 Übergabe von Konstruktor-Parametern manuell möglich (DI automatisch)
Demo SPA Routing
Demo Veralteten Browser erkennen
Eigene Middlewares schreiben
Response verändern - Achtung!
 Response (Header, Body) kann nur vor dem ersten Schreiben verändert werden
 Response wird aus Performancegründen gestreamt
 Beim ersten Schreiben des Response Bodies beginnt der Server die Header zu senden
 Header, Status Code etc. können nur vor dem ersten Schreiben geändert werden
 Generelle Regel: beim Schreiben des Response die Pipeline beenden
 Response nicht mehr nach dem Aufruf der nächsten Middleware ändern
26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 27
Eigene Middlewares schreiben
Response verändern - Was tun?
 Beispiel: alle „Schimpfwörter“ sollen aus dem Response-Content entfernt werden
 Möglichkeit 1: nicht durch Middleware lösen, sondern tiefer in der Businesslogik
 Möglichkeit 2: temporärer MemoryStream (Achtung  Performance!)
 Beispiel: Header-Feld ändern (Cache, StatusCode, Encoding, …)
 context.Response.OnStarting() abonnieren
26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 28
Demo Schimpfwörter filtern
Zusammenfassung
Anwendungsfälle
Einsatz im aktuellen Projekt
 Angular/SPA Routing
 Mobile Device Detection
 Prerendering der SPA (prerender.io)
 Proxy (z.B. zu Web API)
 Dynamische sitemap.xml und robots.txt-Builder
 Detektion alter Browser
 Caching mit speziellen Caching-Regeln
 Filterung von Requests
 Autorisierung/Authentifizierung
 …
26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 31
Zusammenfassung
Warum Middlewares nutzen?
 Zentrales Konzept von ASP.NET Core
 Cross-Platform
 Einfach zu implementieren
 Pipeline-Aufbau: Volle Flexibilität und Transparenz
 Performance! https://www.techempower.com/blog/2016/11/16/framework-benchmarks-round-13/
 um ein Vielfaches schneller als ASP.NET oder Mono
26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 32
Matthias Jauernig
www.jauernig-it.de
matthias@jauernig-it.de
@JauernigIT
Frankfurt/Rhein-Main
Professionell. Individuell. Innovativ.
ASP.NET Core Middlewares
1 de 33

Recomendados

Net@night asp.net mvc por
Net@night asp.net mvcNet@night asp.net mvc
Net@night asp.net mvcDigicomp Academy AG
1.4K vistas15 diapositivas
Building Enterprise Applications with AngularJS (GDG DevFest Karlsruhe 2014) por
Building Enterprise Applications with AngularJS (GDG DevFest Karlsruhe 2014)Building Enterprise Applications with AngularJS (GDG DevFest Karlsruhe 2014)
Building Enterprise Applications with AngularJS (GDG DevFest Karlsruhe 2014)Christian Janz
1.7K vistas33 diapositivas
PHP-Module in statischen Seiten - Architektur-Ansätze por
PHP-Module in statischen Seiten - Architektur-AnsätzePHP-Module in statischen Seiten - Architektur-Ansätze
PHP-Module in statischen Seiten - Architektur-AnsätzeRalf Lütke
2.2K vistas13 diapositivas
UI5 Custom Controls (German language!) - Präsentation von den DSAG Thementage... por
UI5 Custom Controls (German language!) - Präsentation von den DSAG Thementage...UI5 Custom Controls (German language!) - Präsentation von den DSAG Thementage...
UI5 Custom Controls (German language!) - Präsentation von den DSAG Thementage...Andreas Kunz
1.4K vistas18 diapositivas
Feature Flags mit Togglz por
Feature Flags mit TogglzFeature Flags mit Togglz
Feature Flags mit TogglzChristian Kaltepoth
1.2K vistas31 diapositivas
Informatik Seminar Groovy Und Grails por
Informatik Seminar Groovy Und GrailsInformatik Seminar Groovy Und Grails
Informatik Seminar Groovy Und Grailsschmichri
790 vistas20 diapositivas

Más contenido relacionado

La actualidad más candente

Einführung Maven por
Einführung MavenEinführung Maven
Einführung MavenFunThomas424242
1.4K vistas25 diapositivas
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick por
Taugt AngularJS wirklich was? Erfahrungsbericht und AusblickTaugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und AusblickPhilipp Burgmer
1.7K vistas34 diapositivas
Spring Boot - Wird Spring jetzt wirklich einfach? por
Spring Boot - Wird Spring jetzt wirklich einfach?Spring Boot - Wird Spring jetzt wirklich einfach?
Spring Boot - Wird Spring jetzt wirklich einfach?jenspresser
327 vistas34 diapositivas
Creasoft c-Day 2009 - Webtechnologien der Zukunft por
Creasoft c-Day 2009 - Webtechnologien der ZukunftCreasoft c-Day 2009 - Webtechnologien der Zukunft
Creasoft c-Day 2009 - Webtechnologien der ZukunftCreasoft AG
1K vistas21 diapositivas
Introduction to Apache Maven 3 (German) por
Introduction to Apache Maven 3 (German)Introduction to Apache Maven 3 (German)
Introduction to Apache Maven 3 (German)Chris Michael Klinger
2.5K vistas26 diapositivas
Elsholz stoll js_03_10 por
Elsholz stoll js_03_10Elsholz stoll js_03_10
Elsholz stoll js_03_10Tomasz Waszczyk
1K vistas4 diapositivas

La actualidad más candente(19)

Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick por Philipp Burgmer
Taugt AngularJS wirklich was? Erfahrungsbericht und AusblickTaugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Philipp Burgmer1.7K vistas
Spring Boot - Wird Spring jetzt wirklich einfach? por jenspresser
Spring Boot - Wird Spring jetzt wirklich einfach?Spring Boot - Wird Spring jetzt wirklich einfach?
Spring Boot - Wird Spring jetzt wirklich einfach?
jenspresser327 vistas
Creasoft c-Day 2009 - Webtechnologien der Zukunft por Creasoft AG
Creasoft c-Day 2009 - Webtechnologien der ZukunftCreasoft c-Day 2009 - Webtechnologien der Zukunft
Creasoft c-Day 2009 - Webtechnologien der Zukunft
Creasoft AG1K vistas
Creasoft - Windows Azure por Creasoft AG
Creasoft - Windows AzureCreasoft - Windows Azure
Creasoft - Windows Azure
Creasoft AG967 vistas
Creasoft Akademie - Deep Dive into ASP.NET MVC por Creasoft AG
Creasoft Akademie - Deep Dive into ASP.NET MVCCreasoft Akademie - Deep Dive into ASP.NET MVC
Creasoft Akademie - Deep Dive into ASP.NET MVC
Creasoft AG1.8K vistas
Automatischer Build mit Maven por Stefan Scheidt
Automatischer Build mit MavenAutomatischer Build mit Maven
Automatischer Build mit Maven
Stefan Scheidt635 vistas
.NET Summit 2016 in München: ASP.NET Core 1 por Manfred Steyer
.NET Summit 2016 in München: ASP.NET Core 1.NET Summit 2016 in München: ASP.NET Core 1
.NET Summit 2016 in München: ASP.NET Core 1
Manfred Steyer352 vistas
Grails im Überblick und in der Praxis por Tobias Kraft
Grails im Überblick und in der PraxisGrails im Überblick und in der Praxis
Grails im Überblick und in der Praxis
Tobias Kraft2.4K vistas
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m... por Marc Müller
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
Marc Müller91 vistas
Windows 8 für Entwickler por Jan Hentschel
Windows 8 für EntwicklerWindows 8 für Entwickler
Windows 8 für Entwickler
Jan Hentschel5.1K vistas
Java-Webanwendungen mit Vaadin 8 por gedoplan
Java-Webanwendungen mit Vaadin 8Java-Webanwendungen mit Vaadin 8
Java-Webanwendungen mit Vaadin 8
gedoplan152 vistas
EnterJS 2015 - JavaScript von Morgen schon heute por Philipp Burgmer
EnterJS 2015 - JavaScript von Morgen schon heuteEnterJS 2015 - JavaScript von Morgen schon heute
EnterJS 2015 - JavaScript von Morgen schon heute
Philipp Burgmer666 vistas

Similar a Einführung in ASP.NET Core Middlewares

Architekturen für .NET Core-Anwendungen por
Architekturen für .NET Core-AnwendungenArchitekturen für .NET Core-Anwendungen
Architekturen für .NET Core-AnwendungenRobin Sedlaczek
197 vistas33 diapositivas
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5 por
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5Digicomp Academy AG
1.2K vistas16 diapositivas
MongoDB Munich 2012: Spring Data MongoDB por
MongoDB Munich 2012: Spring Data MongoDBMongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBTobias Trelle
2.4K vistas21 diapositivas
AndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung por
AndroMDA - Einführung in eine Open Source Model Driven Architecture LösungAndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture LösungEduard Hildebrandt
2.3K vistas36 diapositivas
Große Applikationen mit AngularJS por
Große Applikationen mit AngularJSGroße Applikationen mit AngularJS
Große Applikationen mit AngularJSSebastian Springer
3.3K vistas109 diapositivas
Präsentation webservices por
Präsentation webservicesPräsentation webservices
Präsentation webservicesxxtesaxx
577 vistas15 diapositivas

Similar a Einführung in ASP.NET Core Middlewares(20)

Architekturen für .NET Core-Anwendungen por Robin Sedlaczek
Architekturen für .NET Core-AnwendungenArchitekturen für .NET Core-Anwendungen
Architekturen für .NET Core-Anwendungen
Robin Sedlaczek197 vistas
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5 por Digicomp Academy AG
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5
Digicomp Academy AG1.2K vistas
MongoDB Munich 2012: Spring Data MongoDB por Tobias Trelle
MongoDB Munich 2012: Spring Data MongoDBMongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDB
Tobias Trelle2.4K vistas
AndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung por Eduard Hildebrandt
AndroMDA - Einführung in eine Open Source Model Driven Architecture LösungAndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
Eduard Hildebrandt2.3K vistas
Präsentation webservices por xxtesaxx
Präsentation webservicesPräsentation webservices
Präsentation webservices
xxtesaxx577 vistas
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core por Gregor Biswanger
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreHands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Gregor Biswanger212 vistas
Ionic 2 - Hybridapps auf Steroiden por Hendrik Lösch
Ionic 2 - Hybridapps auf SteroidenIonic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf Steroiden
Hendrik Lösch506 vistas
Architectures for .Net Core Applications por Robin Sedlaczek
Architectures for .Net Core ApplicationsArchitectures for .Net Core Applications
Architectures for .Net Core Applications
Robin Sedlaczek229 vistas
.NET Core, .NET Standard & ASP.NET Core - Eine Übersicht por Jürgen Gutsch
.NET Core, .NET Standard & ASP.NET Core - Eine Übersicht.NET Core, .NET Standard & ASP.NET Core - Eine Übersicht
.NET Core, .NET Standard & ASP.NET Core - Eine Übersicht
Jürgen Gutsch668 vistas
SokaHH: Testen von Rich-Web-UI (German) por Mark Michaelis
SokaHH: Testen von Rich-Web-UI (German)SokaHH: Testen von Rich-Web-UI (German)
SokaHH: Testen von Rich-Web-UI (German)
Mark Michaelis1.7K vistas
MEAN SCS in der Cloud por Torsten Fink
MEAN SCS in der CloudMEAN SCS in der Cloud
MEAN SCS in der Cloud
Torsten Fink496 vistas
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ... por LeanIX GmbH
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
LeanIX GmbH3.8K vistas
Rapid Application Development mit Openobject por openbig
Rapid Application Development mit OpenobjectRapid Application Development mit Openobject
Rapid Application Development mit Openobject
openbig754 vistas

Einführung in ASP.NET Core Middlewares

  • 2. Matthias Jauernig Sourcecode zum Vortrag  https://github.com/JauernigIT/aspnetcore_middlewares  Demo für Run/Use/Map  Demo für Angular 4 mit ASP.NET Core inkl. 2 Middlewares (SPA Routing, Old Browser Detection)  Demo für Response-Veränderung (Filtern von Schimpfwörtern) 26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 2
  • 3. Matthias Jauernig Wer ich bin  Freiberuflicher Webentwickler/-architekt  Raum Frankfurt / Rhein-Main  10 Jahre Erfahrung in professioneller Softwareentwicklung  C#/.NET, .NET Core, ASP.NET MVC, TypeScript, Angular 4, Kendo UI Wie ich zu .NET Core komme  Privat & aktuelles Projekt (Bank, öffentliche Webseite)  Frontend: Single Page Application (SPA) Backend: .NET Core als leichtgewichtige Hosting-Lösung  20 genutzte Middlewares, davon 12 eigenentwickelt 26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 3 www.jauernig-it.de
  • 5. Was ist eine Middleware? 26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 5 Argonne National Laboratory CC BY-SA 2.0, @Wikimedia ?
  • 6. Was ist eine Middleware? Das ist eine Middleware: 26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 6 app.Run(async context => { await context.Response .WriteAsync("Hello World!"); });
  • 7. Was ist eine Middleware? Definition “Middleware is software that is assembled into an application pipeline to handle requests and responses.” 26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 7 Quelle: ASP.NET Core Docs, Microsoft
  • 8. Was ist eine Middleware? ASP.NET Core Middleware  Request Delegate 26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 8 public Task Invoke(HttpContext context) { // do something }
  • 10. ASP.NET Core Middlewares Basierend auf Best Practices der WebDev Community  Node.js Express  Rails on Rack  … Evolution aus OWIN Middlewares  Konzept der Middleware-Pipeline zur Verarbeitung von Requests/Responses  Einfacher als OWIN Middlewares (zusätzliche Abstraktionen), verbessertes DI  Nutzbarkeit von OWIN Middlewares in ASP.NET Core (app.UseOwin()) 26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 10
  • 11. ASP.NET Core Middlewares Ablösung von HTTP-Handlern und HTTP-Modulen 26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 11 Authorization Module Andere Module MVC HTTP Handler .report HTTP Handler Unauthorized request Request for /Home/Index Request for /sales.report Quelle: ASP.NET Core Docs, Microsoft
  • 12. Middlewares vs. HTTP-Handler/Module HTTP-Handler/Module  Handler: Request-Verarbeitung abhängig von Dateiname/Dateiendung  Module:  für jeden Request ausgeführt  Reihenfolge abhängig von Lifecycle Events und web.config ASP.NET Core Middlewares  Ablösung/Vereinheitlichung beider Konzepte  Einfacher und verständlicher als HTTP-Handler/Module (keine magic classes)  Pipeline-Definition und Reihenfolge per Code (keine magic web.config)  Flexibilität in Pipeline-Aufbau (Verzweigungen, etc.) 26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 12
  • 14. Die Request-Pipeline aufbauen Request-Verarbeitung: Run()  Request verarbeiten und direkt zurückkehren 26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 14 Run()
  • 15. Die Request-Pipeline aufbauen Request-Verarbeitung: Use()  Request verarbeiten und nächste Middleware in der Pipeline aufrufen 26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 15 Use() Run()Use()
  • 16. Die Request-Pipeline aufbauen Request-Verarbeitung: Map()  auf eine andere Pipeline verzweigen, abhängig von einer festgelegten Bedingung 26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 16 Run()Map()Use() Use() Use()
  • 18. Die Request-Pipeline aufbauen Ausführungsreihenfolge 26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 18 Quelle: ASP.NET Core Docs, Microsoft
  • 19. Die Request-Pipeline aufbauen Reihenfolge ist entscheidend!  Verhalten: wird das Gewünschte getan?  Sicherheit: wird zu viel Information preisgegeben?  Performance: wird zu viel ausgeführt? Verbesserung der Performance  Häufig ausgeführte Operationen weiter oben  Ressourcenintensive Operationen weiter unten  Nur möglich, wenn Verhalten nicht beeinträchtigt wird 26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 19
  • 20. Eingebaute Middlewares nutzen  Authentication  CORS  Error Handling  Response Caching  Response Compression  Routing  Session  File Server  Static Files  URL Rewriting  MVC  … 26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 20
  • 21. Demo ASP.NET Core & Angular 4
  • 23. Eigene Middlewares schreiben Eigene Middleware-Klassen 26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 23 class SomethingMiddleware { private RequestDelegate next; public SomethingMiddleware(RequestDelegate next) { this.next = next; } public async Task Invoke(HttpContext context) { // do something ... await next(context); } }
  • 24. Eigene Middlewares schreiben Best Practice: IApplicationBuilder Erweiterungsmethode 26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 24 static class IApplicationBuilderExtensions { public static IApplicationBuilder UseSomething(this IApplicationBuilder app) { return app.UseMiddleware<SomethingMiddleware>(); }}  „Factory-Methode“ zur Erzeugung der Middleware  Übergabe von Konstruktor-Parametern manuell möglich (DI automatisch)
  • 27. Eigene Middlewares schreiben Response verändern - Achtung!  Response (Header, Body) kann nur vor dem ersten Schreiben verändert werden  Response wird aus Performancegründen gestreamt  Beim ersten Schreiben des Response Bodies beginnt der Server die Header zu senden  Header, Status Code etc. können nur vor dem ersten Schreiben geändert werden  Generelle Regel: beim Schreiben des Response die Pipeline beenden  Response nicht mehr nach dem Aufruf der nächsten Middleware ändern 26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 27
  • 28. Eigene Middlewares schreiben Response verändern - Was tun?  Beispiel: alle „Schimpfwörter“ sollen aus dem Response-Content entfernt werden  Möglichkeit 1: nicht durch Middleware lösen, sondern tiefer in der Businesslogik  Möglichkeit 2: temporärer MemoryStream (Achtung  Performance!)  Beispiel: Header-Feld ändern (Cache, StatusCode, Encoding, …)  context.Response.OnStarting() abonnieren 26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 28
  • 31. Anwendungsfälle Einsatz im aktuellen Projekt  Angular/SPA Routing  Mobile Device Detection  Prerendering der SPA (prerender.io)  Proxy (z.B. zu Web API)  Dynamische sitemap.xml und robots.txt-Builder  Detektion alter Browser  Caching mit speziellen Caching-Regeln  Filterung von Requests  Autorisierung/Authentifizierung  … 26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 31
  • 32. Zusammenfassung Warum Middlewares nutzen?  Zentrales Konzept von ASP.NET Core  Cross-Platform  Einfach zu implementieren  Pipeline-Aufbau: Volle Flexibilität und Transparenz  Performance! https://www.techempower.com/blog/2016/11/16/framework-benchmarks-round-13/  um ein Vielfaches schneller als ASP.NET oder Mono 26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 32