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

26
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

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

Page 1: .NET Summit 2016 in München: ASP.NET Core 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

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

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

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

3

Didaktik

Folien

Live-Coding

Folie 10

ASP.NET HEUTE UND MORGEN

Page 11

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

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", ...},

]

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

5

ASP.NET HEUTE

Page 15

Status quo

MVC

Web API

SignalR

Web Pages

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

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

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

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

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

8

Warum Kopplung an IIS ?

Folie 21

ASP.NET Frameworks

System.Web

IIS

ASP.NET CORE 1

Page 22

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

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

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

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

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

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"

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

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

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

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");}

[…]}

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

14

Hosting

Kestrel (X-Plattform, Self-Host)

WebListener (Windows, Self-Host)

IIS Kestrel

Nginx Kestrel

Folie 34

DEMO

Page 35

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

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>

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

16

Standard-Layout

Für gewöhnlich:

Views/Shared/_Layout.cshtml

Definiert in Views/_ViewStart.cshtml:

Layout = "_Layout";

Folie 38

DEMO

Page 39

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

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

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

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

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

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

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

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

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

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

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

22

DEMO

Page 50

META-DATEN VIA SWAGGER

Page 51

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

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)

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

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

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

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

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

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

[email protected]

SOFTWAREarchitekt.at

ManfredSteyer

Contact