Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

Einführung in ASP.NET Core Middlewares

322 vues

Publié le

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

Publié dans : Technologie
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

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

×