Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Einführung in ASP.NET Core Middlewares

279 Aufrufe

Veröffentlicht am

Einführungsvortrag zu ASP.NET Core Middlewares von der DWX Developer Week 2017 in Nürnberg.

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Einführung in ASP.NET Core Middlewares

  1. 1. Matthias Jauernig www.jauernig-it.de matthias@jauernig-it.de @JauernigIT Frankfurt/Rhein-Main Professionell. Individuell. Innovativ. ASP.NET Core Middlewares
  2. 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. 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
  4. 4. Einleitung
  5. 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. 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. 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. 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 }
  9. 9. Demo Starter-Projekt
  10. 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. 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. 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
  13. 13. Middlewares verwenden
  14. 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. 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. 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()
  17. 17. Demo Run, Use, Map
  18. 18. Die Request-Pipeline aufbauen Ausführungsreihenfolge 26.06.2017 Matthias Jauernig - ASP.NET Core Middlewares 18 Quelle: ASP.NET Core Docs, Microsoft
  19. 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. 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. 21. Demo ASP.NET Core & Angular 4
  22. 22. Eigene Middlewares
  23. 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. 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)
  25. 25. Demo SPA Routing
  26. 26. Demo Veralteten Browser erkennen
  27. 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. 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
  29. 29. Demo Schimpfwörter filtern
  30. 30. Zusammenfassung
  31. 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. 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
  33. 33. Matthias Jauernig www.jauernig-it.de matthias@jauernig-it.de @JauernigIT Frankfurt/Rhein-Main Professionell. Individuell. Innovativ. ASP.NET Core Middlewares

×