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-Generierung
Folie 5
(SELF-)HOSTING
Page  6
4
Hosting
Folie 7
Server
Web-Framework
Web-Application
Middleware1
Middleware2
Middleware…
Middlewaren
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: FORMATTER
KONFIGURIEREN
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

Web APIs mit ASP.NET MVC Core 1

  • 1.
    1 Web APIs mitASP.NET Core MVC 1.0 Manfred Steyer twitter.com/ManfredSteyer ManfredSteyer Über mich … Manfred Steyer Trainer & Berater Angular & ASP.NET Page  2
  • 2.
    2 Ziel Erweiterte Aspekte vonWeb 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.
    3 Inhalt Hosting Routing Http-Antworten beeinflussen Formatter konfigurieren EigeneFormatter Security (JWT) User Secrets Meta-Daten mit Swagger Proxy-Generierung Folie 5 (SELF-)HOSTING Page  6
  • 4.
    4 Hosting Folie 7 Server Web-Framework Web-Application Middleware1 Middleware2 Middleware… Middlewaren Anfrage Antwort Host-Prozess HTTP Konfiguration derPipeline Folie 8 public class Startup { public void ConfigureServices(IServiceCollection services) { […] services.AddMvc() […] } public void Configure(IApplicationBuilder app) { […] app.UseIISPlatformHandler(); app.UseStaticFiles(); app.UseMvc(); […] } }
  • 5.
  • 6.
    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.
    7 Web API mitAttribut-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.
    8 Web API mitAttribut-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.
  • 10.
    10 DEMO: HTTP-ANTWORT BEEINFLUSSEN Page 24 DEMO: FORMATTER KONFIGURIEREN Page  25
  • 11.
    11 DEMO: EIGENE FORMATTER Page 26 SECURITY Page  35
  • 12.
    12 Authentication via Benutzer/Passwort HTTP-Basicvia 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.
    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.
    14 UserSecrets Anwendungs-Einstellungen, die Entwicklernicht 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.
    15 META-DATEN VIA SWAGGER Page 42 Swagger JSON-basierte Metadatenformat für Web APIs Weit verbreitet Kein offizieller Standard Folie 43
  • 16.
    16 Swagger Folie 44 JSON-Schema fürDatentypen Operationen (Verb, Url, Datentypen für Anfrage und Antworten) SWASHBUCKLE Page  45
  • 17.
    17 Swashbuckle  Swagger-Implementierung für ASP.NETMVC 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.