Date post: | 26-Jan-2017 |
Category: |
Internet |
Upload: | manfred-steyer |
View: | 177 times |
Download: | 4 times |
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
Se
rve
r
We
b-F
ram
ew
ork
We
b-A
pp
lica
tion
Mid
dle
ware
1
Mid
dle
ware
2
Mid
dle
ware
…
Mid
dle
ware
n
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
SOFTWAREarchitekt.at
ManfredSteyer
Contact