SlideShare ist ein Scribd-Unternehmen logo
1
ASP.NET Core 1 (vormals ASP.NET 5):
Was ist neu? Was ist anders?
Manfred Steyer
ManfredSteyer
Über mich …
 Manfred Steyer
 SOFTWAREarchitekt.at
 Trainer & Berater
 Angular am Client
 .NET am Server
Page  2
2
Ziel
Ideen und ausgewählte Konzepte hinter
ASP.NET Core 1 anhand einer Demo-
Anwendung vermitteln
Folie 3
Inhalt
Motivation: ASP.NET heute und morgen
DEMO: Web App mit ASP.NET MVC Core 1
DEMO: Web API mit ASP.NET MVC Core 1
Folie 9
3
Didaktik
Folien
Live-Coding
Folie 10
ASP.NET HEUTE UND MORGEN
Page  11
4
Trends
HTTP-Services, Web APIs, REST
GET /flights/Graz-Frankfurt?date=2014-12-24 HTTP/1.1
Host: myserver
Accept: application/xml
HTTP/1.1 200 OK
Content-Type: text/json
[
{"Time": "1700", "FlightNumer":"LH4711", ...},
{"Time": "1800", "FlightNumer":"LH4712", ...},
…
]
5
ASP.NET HEUTE
Page  15
Status quo
MVC
Web
API
SignalR
Web
Pages
6
Stärken von ASP.NET
Vielfältige Optionen
Großes "Out-of-the-Box"-Framework
Etablierte typsichere Sprachen
Gute Werkzeuge
Stärken der Konkurrenz
Leichtgewichtigkeit
Debuggen
Minimaler Server
Side-by-Side
Plattformunabhängigkeit
Asynchronität
7
Was hindert uns daran, die Vorteile der
Konkurrenz in ASP.NET zu übernehmen?
Folie 19
Gründe
Kopplung an IIS
• Plattformunabhängigkeit
• Leichtgewichtigkeit
Architektur
• Debuggen
• Side-by-Side
Folie 20
Komplexität
• Plattformunabhängigkeit
8
Warum Kopplung an IIS ?
Folie 21
ASP.NET Frameworks
System.Web
IIS
ASP.NET CORE 1
Page  22
9
.NET Core
Folie 24
Plattformunabhängigkeit
 Neu-Implementierung
ohne System.Web
 Neues Projektsystem
 Self-Hosting
 Open Source
Leichtgewichtigkeit
 Modular (NuGet)
 Side-by-Side
 Weniger Platzbedarf
 Projekt == NuGet-Paket
 Compile-to-RAM
Folie 25
Eigenschaften
10
System.Web
Features von System.Web müssen neu
implementiert werden
Sessions, Caching, Konfiguration, Routing
Konsequenz: Breaking-Changes
Folie 26
Mehrgleisigkeiten heute
Web API MVC Web Pages
11
ASP.NET MVC Core 1
Vereinheitlichung von MVC, Web API
und Web Pages
Keine Unterscheidung zwischen
(MVC-)Controller und ApiController
Einheitliche Konzepte für Dependency-Injection,
Routing, Filter etc.
Migration
Code muss abgeändert werden
Bestehende Framework-Versionen existieren
nach wie vor, werden jedoch nicht auf Core CLR
migriert
Das selbe gilt für WCF und Web Forms
WCF Web Forms Web API 2MVC 5
"Klassisches" .NET Framework / "Full CLR"
12
ASP.NET CORE 1:
BOOTSTRAPPING
Page  30
Middleware-Komponenten
Folie 31
Server
Web-Framework
Web-Application
Middleware1
Middleware2
Middleware…
Middlewaren
Anfrage
Antwort
Host-Prozess
HTTP
13
Konfiguration der Pipeline
Folie 32
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
[…]
services.AddMvc()
[…]
}
public void Configure(IApplicationBuilder app)
{
[…]
app.UseIISPlatformHandler();
app.UseStaticFiles();
app.UseMvc();
[…]
}
}
Konfiguration Abhängig von der Umgebung
Folie 33
public void Configure(IApplicationBuilder app,
IHostingEnvironment env)
{
[…]
if (env.IsDevelopment()) {
app.UseDeveloperExceptionPage();
}
else {
app.UseExceptionHandler("/Home/Error");
}
[…]
}
14
Hosting
Kestrel (X-Plattform, Self-Host)
WebListener (Windows, Self-Host)
IIS  Kestrel
Nginx  Kestrel
Folie 34
DEMO
Page  35
15
LAYOUT-SEITEN
Page  36
Layout-Seiten
Folie 37
<html>
<head>
<title>@ViewBag.Title</title>
</head>
<body>
<div id="main">
<div>@RenderSection("links", required:true)</div>
<div>@RenderBody()</div>
</div>
</body>
</html>
16
Standard-Layout
Für gewöhnlich:
 Views/Shared/_Layout.cshtml
Definiert in Views/_ViewStart.cshtml:
 Layout = "_Layout";
Folie 38
DEMO
Page  39
17
TAG-HELPER
Page  40
@model IEnumerable<MvcApplication.Models.Flug>
[…]
@foreach (var item in Model) {
<tr>
<td>
@item.Von
</td>
<td>
@item.Nach
</td>
<td>
<a asp-controller="Home"
asp-action="Edit"
asp-route-id="1" class="navbar-brand">Edit</a>
</td>
</tr>
}
Beispiel für View
18
Nutzung von TagHelper
 Pakete
 Microsoft.AspNet.Mvc.TagHelpers
 Microsoft.AspNet.Tooling.Razor
 Views/_ViewImports.cshtml
 @addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers"
Folie 42
DEMO
Page  43
19
WEB APIS MIT MVC CORE 1
Page  44
Web APIs in MVC Core 1
Kein eigenes Routing für Web APIs
Selbe Konzept, wie für MVC-Anwendungen
Routing berücksichtigt keine URL-Parameter zur
Wahl der Methode
Folie 45
20
Web API mit Attribut-basierten Routen
Folie 46
[Route("api/[controller]")]
public class FlugController: Controller
{
// GET api/flug/{id}
[HttpGet("{id}")]
public Flug GetById(int id) { […] }
// GET api/flug/byRoute?von=...&nach=...
[HttpGet("byRoute")]
public List<Flug> GetByRoute(string von, string nach) { […] }
// POST api/flug
[HttpPost]
public void PostFlug([FromBody] Flug flug) { […] }
}
DEMO
Page  47
21
Formatter konfigurieren
Folie 48
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddJsonOptions(options => { […] })
.AddMvcOptions(options => { […] });
}
}
XML-Formatter
Paket: Microsoft.AspNet.Mvc.Formatters.Xml
 XmlDataContractSerializerInputFormatter
 XmlDataContractSerializerOutputFormatter
Folie 49
22
DEMO
Page  50
META-DATEN VIA SWAGGER
Page  51
23
Swagger
JSON-basierte Metadatenformat für Web APIs
Weit verbreitet
Kein offizieller Standard
Folie 52
Swagger
Folie 53
JSON-Schema für Datentypen
Operationen (Verb, Url,
Datentypen für Anfrage und Antworten)
24
SWASHBUCKLE
Page  54
Swashbuckle
 Swagger-Implementierung für
ASP.NET MVC Core 1
 Installation via NuGet
 Startup.ConfigureServices:
 services.AddSwaggerGen();
 Startup.Configure
 app.UseSwaggerGen(); -- Swagger-Dokument via /swagger
 app.UseSwaggerUi(); -- Swaager-UI via /swagger/ui
Folie 55
25
DEMO
Page  56
Fazit
 Aktuelle Trends werden besser unterstützt
 Abstand zur Konkurrenz wird aufgeholt ohne auf eigene
Vorteile zu verzichten
 Plattformunabhängigkeit
 Leichtgewichtigkeit
 Vereinheitlichung, aber Breaking Changes
 Aber: Bestehende Versionen bleiben erhalten
Folie 69
26
Fazit
Neue Features
 Leichtgewichtiges Hosting
 Self-Hosting
 Dependency Injection
 Tag Helper
MVC: Web Apps & Web APIs
Interessant auch für Desktop/Mobile-Entwickler
(Services)
Folie 70
manfred.steyer@SOFTWAREarchitekt.at
SOFTWAREarchitekt.at
ManfredSteyer
Contact

Weitere ähnliche Inhalte

ODP
Präsentation webservices
PDF
EnterJS 2015 - JavaScript von Morgen schon heute
PDF
Legacy WebApps mit AngularJS pimpen
PPTX
Einführung in ASP.NET Core Middlewares
PDF
WordPress Multisite
ODP
Einführung in die webOS Programmierung
PPTX
Processing digital ideas
PDF
cert
Präsentation webservices
EnterJS 2015 - JavaScript von Morgen schon heute
Legacy WebApps mit AngularJS pimpen
Einführung in ASP.NET Core Middlewares
WordPress Multisite
Einführung in die webOS Programmierung
Processing digital ideas
cert

Ähnlich wie .NET Summit 2016 in München: ASP.NET Core 1 (20)

PDF
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
PPTX
Architekturen für .NET Core-Anwendungen
PDF
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
PDF
WebAPIs mit ASP.NET MVC 6
PDF
(Ebook) Pro ASP.NET Core 7, MEAP V03 by Adam Freeman
PDF
Überblick zu Angular2 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015
PDF
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
PDF
Net@night asp.net mvc
PDF
Web APIs mit ASP.NET Core 1
PDF
Enterprise UI
PPTX
Microservices mit Rust
PDF
Überblick zu MVC6 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015
PDF
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5
PDF
Angular 2 Workshop November 2015 von der w-jax 2015
PDF
Angular 2 Workshop Oktober 2015
PPTX
Angular von 0 auf 100
KEY
Ruby on Rails SS09 06
PDF
Open icf (open identity connector framework) @ forgerock deutsch
PDF
Wieviel Client braucht das Web?
PDF
PHP-Module in statischen Seiten - Architektur-Ansätze
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
Architekturen für .NET Core-Anwendungen
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
WebAPIs mit ASP.NET MVC 6
(Ebook) Pro ASP.NET Core 7, MEAP V03 by Adam Freeman
Überblick zu Angular2 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Net@night asp.net mvc
Web APIs mit ASP.NET Core 1
Enterprise UI
Microservices mit Rust
Überblick zu MVC6 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5
Angular 2 Workshop November 2015 von der w-jax 2015
Angular 2 Workshop Oktober 2015
Angular von 0 auf 100
Ruby on Rails SS09 06
Open icf (open identity connector framework) @ forgerock deutsch
Wieviel Client braucht das Web?
PHP-Module in statischen Seiten - Architektur-Ansätze
Anzeige

Mehr von Manfred Steyer (9)

PDF
The newst new Router for Angular 2 - Talk at @angular_berlin, July 2016
PDF
Angular 2 - Routing Jax2016
PDF
Moderne Web-Anwendungen mit Angular 2
PDF
Datenbasierte Services mit MVC Core 1 und EF Core 1
PDF
Datengetriebene Web APIs mit Entity Framework
PDF
Angular 2: Custom Components
PDF
Web APIs mit ASP.NET Core MVC 1
PDF
Microservices
PDF
Angular 2 and 1.5 Routing
The newst new Router for Angular 2 - Talk at @angular_berlin, July 2016
Angular 2 - Routing Jax2016
Moderne Web-Anwendungen mit Angular 2
Datenbasierte Services mit MVC Core 1 und EF Core 1
Datengetriebene Web APIs mit Entity Framework
Angular 2: Custom Components
Web APIs mit ASP.NET Core MVC 1
Microservices
Angular 2 and 1.5 Routing
Anzeige

.NET Summit 2016 in München: ASP.NET Core 1

  • 1. 1 ASP.NET Core 1 (vormals ASP.NET 5): Was ist neu? Was ist anders? Manfred Steyer ManfredSteyer Über mich …  Manfred Steyer  SOFTWAREarchitekt.at  Trainer & Berater  Angular am Client  .NET am Server Page  2
  • 2. 2 Ziel Ideen und ausgewählte Konzepte hinter ASP.NET Core 1 anhand einer Demo- Anwendung vermitteln Folie 3 Inhalt Motivation: ASP.NET heute und morgen DEMO: Web App mit ASP.NET MVC Core 1 DEMO: Web API mit ASP.NET MVC Core 1 Folie 9
  • 4. 4 Trends HTTP-Services, Web APIs, REST GET /flights/Graz-Frankfurt?date=2014-12-24 HTTP/1.1 Host: myserver Accept: application/xml HTTP/1.1 200 OK Content-Type: text/json [ {"Time": "1700", "FlightNumer":"LH4711", ...}, {"Time": "1800", "FlightNumer":"LH4712", ...}, … ]
  • 5. 5 ASP.NET HEUTE Page  15 Status quo MVC Web API SignalR Web Pages
  • 6. 6 Stärken von ASP.NET Vielfältige Optionen Großes "Out-of-the-Box"-Framework Etablierte typsichere Sprachen Gute Werkzeuge Stärken der Konkurrenz Leichtgewichtigkeit Debuggen Minimaler Server Side-by-Side Plattformunabhängigkeit Asynchronität
  • 7. 7 Was hindert uns daran, die Vorteile der Konkurrenz in ASP.NET zu übernehmen? Folie 19 Gründe Kopplung an IIS • Plattformunabhängigkeit • Leichtgewichtigkeit Architektur • Debuggen • Side-by-Side Folie 20 Komplexität • Plattformunabhängigkeit
  • 8. 8 Warum Kopplung an IIS ? Folie 21 ASP.NET Frameworks System.Web IIS ASP.NET CORE 1 Page  22
  • 9. 9 .NET Core Folie 24 Plattformunabhängigkeit  Neu-Implementierung ohne System.Web  Neues Projektsystem  Self-Hosting  Open Source Leichtgewichtigkeit  Modular (NuGet)  Side-by-Side  Weniger Platzbedarf  Projekt == NuGet-Paket  Compile-to-RAM Folie 25 Eigenschaften
  • 10. 10 System.Web Features von System.Web müssen neu implementiert werden Sessions, Caching, Konfiguration, Routing Konsequenz: Breaking-Changes Folie 26 Mehrgleisigkeiten heute Web API MVC Web Pages
  • 11. 11 ASP.NET MVC Core 1 Vereinheitlichung von MVC, Web API und Web Pages Keine Unterscheidung zwischen (MVC-)Controller und ApiController Einheitliche Konzepte für Dependency-Injection, Routing, Filter etc. Migration Code muss abgeändert werden Bestehende Framework-Versionen existieren nach wie vor, werden jedoch nicht auf Core CLR migriert Das selbe gilt für WCF und Web Forms WCF Web Forms Web API 2MVC 5 "Klassisches" .NET Framework / "Full CLR"
  • 12. 12 ASP.NET CORE 1: BOOTSTRAPPING Page  30 Middleware-Komponenten Folie 31 Server Web-Framework Web-Application Middleware1 Middleware2 Middleware… Middlewaren Anfrage Antwort Host-Prozess HTTP
  • 13. 13 Konfiguration der Pipeline Folie 32 public class Startup { public void ConfigureServices(IServiceCollection services) { […] services.AddMvc() […] } public void Configure(IApplicationBuilder app) { […] app.UseIISPlatformHandler(); app.UseStaticFiles(); app.UseMvc(); […] } } Konfiguration Abhängig von der Umgebung Folie 33 public void Configure(IApplicationBuilder app, IHostingEnvironment env) { […] if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); } […] }
  • 14. 14 Hosting Kestrel (X-Plattform, Self-Host) WebListener (Windows, Self-Host) IIS  Kestrel Nginx  Kestrel Folie 34 DEMO Page  35
  • 15. 15 LAYOUT-SEITEN Page  36 Layout-Seiten Folie 37 <html> <head> <title>@ViewBag.Title</title> </head> <body> <div id="main"> <div>@RenderSection("links", required:true)</div> <div>@RenderBody()</div> </div> </body> </html>
  • 16. 16 Standard-Layout Für gewöhnlich:  Views/Shared/_Layout.cshtml Definiert in Views/_ViewStart.cshtml:  Layout = "_Layout"; Folie 38 DEMO Page  39
  • 17. 17 TAG-HELPER Page  40 @model IEnumerable<MvcApplication.Models.Flug> […] @foreach (var item in Model) { <tr> <td> @item.Von </td> <td> @item.Nach </td> <td> <a asp-controller="Home" asp-action="Edit" asp-route-id="1" class="navbar-brand">Edit</a> </td> </tr> } Beispiel für View
  • 18. 18 Nutzung von TagHelper  Pakete  Microsoft.AspNet.Mvc.TagHelpers  Microsoft.AspNet.Tooling.Razor  Views/_ViewImports.cshtml  @addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers" Folie 42 DEMO Page  43
  • 19. 19 WEB APIS MIT MVC CORE 1 Page  44 Web APIs in MVC Core 1 Kein eigenes Routing für Web APIs Selbe Konzept, wie für MVC-Anwendungen Routing berücksichtigt keine URL-Parameter zur Wahl der Methode Folie 45
  • 20. 20 Web API mit Attribut-basierten Routen Folie 46 [Route("api/[controller]")] public class FlugController: Controller { // GET api/flug/{id} [HttpGet("{id}")] public Flug GetById(int id) { […] } // GET api/flug/byRoute?von=...&nach=... [HttpGet("byRoute")] public List<Flug> GetByRoute(string von, string nach) { […] } // POST api/flug [HttpPost] public void PostFlug([FromBody] Flug flug) { […] } } DEMO Page  47
  • 21. 21 Formatter konfigurieren Folie 48 public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddMvc() .AddJsonOptions(options => { […] }) .AddMvcOptions(options => { […] }); } } XML-Formatter Paket: Microsoft.AspNet.Mvc.Formatters.Xml  XmlDataContractSerializerInputFormatter  XmlDataContractSerializerOutputFormatter Folie 49
  • 22. 22 DEMO Page  50 META-DATEN VIA SWAGGER Page  51
  • 23. 23 Swagger JSON-basierte Metadatenformat für Web APIs Weit verbreitet Kein offizieller Standard Folie 52 Swagger Folie 53 JSON-Schema für Datentypen Operationen (Verb, Url, Datentypen für Anfrage und Antworten)
  • 24. 24 SWASHBUCKLE Page  54 Swashbuckle  Swagger-Implementierung für ASP.NET MVC Core 1  Installation via NuGet  Startup.ConfigureServices:  services.AddSwaggerGen();  Startup.Configure  app.UseSwaggerGen(); -- Swagger-Dokument via /swagger  app.UseSwaggerUi(); -- Swaager-UI via /swagger/ui Folie 55
  • 25. 25 DEMO Page  56 Fazit  Aktuelle Trends werden besser unterstützt  Abstand zur Konkurrenz wird aufgeholt ohne auf eigene Vorteile zu verzichten  Plattformunabhängigkeit  Leichtgewichtigkeit  Vereinheitlichung, aber Breaking Changes  Aber: Bestehende Versionen bleiben erhalten Folie 69
  • 26. 26 Fazit Neue Features  Leichtgewichtiges Hosting  Self-Hosting  Dependency Injection  Tag Helper MVC: Web Apps & Web APIs Interessant auch für Desktop/Mobile-Entwickler (Services) Folie 70 manfred.steyer@SOFTWAREarchitekt.at SOFTWAREarchitekt.at ManfredSteyer Contact