Web APIs mit ASP.NET MVC Core 1

Post on 26-Jan-2017

329 views 1 download

Transcript of Web APIs mit ASP.NET MVC Core 1

1

Web APIs mit ASP.NET Core MVC 1.0

Manfred Steyer

twitter.com/ManfredSteyer

ManfredSteyer

Über mich …

Manfred Steyer

Trainer & Berater

Angular & ASP.NET

Page 2

2

Ziel

Erweiterte Aspekte von Web APIs mit MVC

Core 1 anhand eines Beispiels kennen lernen.

Folie 3

Zielgruppe

Personen mit grundlegender Erfahrung mit

Web APIs unter .NET

Folie 4

3

Inhalt

Hosting

Routing

Http-Antworten beeinflussen

Formatter konfigurieren

Eigene Formatter

Security (JWT)

User Secrets

Meta-Daten mit Swagger

Proxy-GenerierungFolie 5

(SELF-)HOSTING

Page 6

4

Hosting

Folie 7

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

Konfiguration der Pipeline

Folie 8

public class Startup{

public void ConfigureServices(IServiceCollection services){

[…]services.AddMvc()[…]

}

public void Configure(IApplicationBuilder app) {

[…]app.UseIISPlatformHandler();app.UseStaticFiles();app.UseMvc();[…]

}}

5

DEMO

Page 9

ROUTING

Page 10

6

Was ist Routing?

Url Action-Methode

Folie 11

Web APIs in MVC Core 1

Kein eigenes Routing für Web APIs

Selbe Konzept, wie für MVC-Anwendungen

/controller/action

Routing berücksichtigt keine URL-Parameter

Folie 13

7

Web API mit Attribut-basierten Routen

Folie 18

[Route("api/[controller]")]public class FlugController: Controller{

[HttpGet("{id}")]public Flug GetById(int id) { […] }

[HttpGet("byRoute")]public List<Flug> GetByRoute(string von, string nach) { […] }

[HttpPost]public void PostFlug([FromBody] Flug flug) { […] }

}

Web API mit Attribut-basierten Routen

Folie 19

[Route("api/[controller]")]public class FlugController: Controller{

// GET api/flug/{id}[HttpGet("{id}")]public Flug GetById(int id) { […] }

[HttpGet("byRoute")]public List<Flug> GetByRoute(string von, string nach) { […] }

[HttpPost]public void PostFlug([FromBody] Flug flug) { […] }

}

8

Web API mit Attribut-basierten Routen

Folie 20

[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) { […] }

[HttpPost]public void PostFlug([FromBody] Flug flug) { […] }

}

Web API mit Attribut-basierten Routen

Folie 21

[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) { […] }

}

9

Migration?

Microsoft.AspNet.Mvc.WebApiCompatShim

Folie 22

DEMO

Page 23

10

DEMO: HTTP-ANTWORT BEEINFLUSSEN

Page 24

DEMO: FORMATTERKONFIGURIEREN

Page 25

11

DEMO: EIGENE FORMATTER

Page 26

SECURITY

Page 35

12

Authentication via Benutzer/Passwort

HTTP-Basic via IIS oder HttpListener

Eigene HTTP-Middleware

Folie 36

Authentication via Tokens

JwtBearerAuthentication-Middleware

Prüft JWT-Tokens

Übernimmt Inhalt aus JWT-Token in User-Objekt

Folie 37

13

OAuth 2 – Prinzipieller Ablauf

Folie 38

Client

Authorization-Server

Resource-Server

3. Token

Ein zentrales Benutzerkonto

Auth. von Client entkoppelt

Flexibilität durch Token

DEMO(IDENTITYSERVER3)

Page 39

14

UserSecrets

Anwendungs-Einstellungen, die Entwickler nicht ins

Projekt aufnehmen möchte

Personenbezogener Connection-String

Passwort

Kann am Rechner abgelegt und von dort geladen

werden

Nur für Entwicklung sinnvoll!

Folie 40

DEMO

Page 41

15

META-DATEN VIA SWAGGER

Page 42

Swagger

JSON-basierte Metadatenformat für Web APIs

Weit verbreitet

Kein offizieller Standard

Folie 43

16

Swagger

Folie 44

JSON-Schema für Datentypen

Operationen (Verb, Url,

Datentypen für Anfrage und Antworten)

SWASHBUCKLE

Page 45

17

Swashbuckle

Swagger-Implementierung für

ASP.NET MVC 6

Installation via NuGet

Startup.ConfigureServices:

services.AddSwaggerGen();

Startup.Configure

app.UseSwaggerGen(); -- Swagger-Dokument via /swagger

app.UseSwaggerUi(); -- Swaager-UI via /swagger/ui

Folie 46

DEMO

Page 47

18

manfred.steyer@SOFTWAREarchitekt.at

SOFTWAREarchitekt.at

ManfredSteyer

Contact