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