web apis mit asp.net core 1
TRANSCRIPT
1
Web APIs mit ASP.NET MVC Core 1 (vormals MVC 6)
Manfred Steyer
ManfredSteyer
Über mich …
Manfred Steyer
SOFTWAREarchitekt.at
Trainer & Consultant
Angular
Server-Side .NET
Page 2
2
Ziel
Überblick über die Möglichkeiten für Web APIs
mit ASP.NET MVC Core 1
Folie 3
Didaktik
Folien
Beispiele
Folie 9
3
Inhalt
Warum ASP.NET Core 1?
Bootstrapping
Routing
Konfigurieren
Metadaten via Swagger
Folie 11
.NET Core
Folie 24
[http://www.hanselman.com/]
4
Vorteile
Folie 25
Cross-Plattform
Side-by-Side
Self-HostingF5-Compile-to-Memory
Hosting
Kestrel (X-Plattform, Self-Host)
WebListener (Windows, Self-Host)
IIS Kestrel
Nginx Kestrel
Folie 26
5
Mehrgleisigkeiten
Web API MVC Web Pages
ASP.NET MVC Core 1
Vereinheitlichung von MVC, Web API
und (künftig) Web Pages
Einheitliche Konzepte für Controller, Views,
Dependency-Injection, Routing, Filters etc.
6
Migration
Code muss angepasst werden
Aber: Aktuelle Framework-Versionen werden
weiterhin gewartet
Keine Pläne für Migration von WCF und Web Forms
WCF Web Forms Web API 2MVC 5
.NET 4.x / "Full CLR"
ASP.NET CORE 1:BOOTSTRAPPING
Page 34
7
Middleware-Komponenten
Folie 35
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
Request
Response
Host-Process
HTTP
Pipeline konfigurieren
Folie 36
public class Startup{
[…]
public void Configure(IApplicationBuilder app) {
[…]app.UseStaticFiles();app.UseMvc();[…]
}}
8
Umgebung berücksichtigen
Folie 37
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{[…]
if (env.IsDevelopment()) {app.UseDeveloperExceptionPage();
}else {
app.UseExceptionHandler("/Home/Error");}
[…]}
Services konfigurieren
Folie 38
public class Startup{
public void ConfigureServices(IServiceCollection services){
[…]services.AddMvc()[…]
}
[…]}
9
DEMO
Page 40
WEB APIS MIT MVC CORE 1
Page 50
10
Web APIs in MVC Core 1
Kein eigenes Routing für Web APIs
Selbes Konzept, wie für MVC
Keine Konventionen für HTTP Verb,
wie GetAll() GET, PostData() POST
Routing berücksichtigt keine URL-Parameter. URL
muss eindeutig auf Action-Methode abbildbar sein!
Aber: WebApiCompatShim
Folie 51
Web API mit Attribut-basierten Routen
Folie 52
[Route("api/[controller]")]public class FlightController: Controller{
[HttpGet("{id}")]public Flight GetById(int id) { […] }
[HttpGet("byRoute")]public List<Flight> GetByRoute(string from, string to) { […] }
[HttpPost]public void PostFlight([FromBody] Flight flight) { […] }
}
11
Web API mit Attribut-basierten Routen
Folie 53
[Route("api/[controller]")]public class FlightController: Controller{
// GET api/flight/{id}[HttpGet("{id}")]public Flight GetById(int id) { […] }
[HttpGet("byRoute")]public List<Flight> GetByRoute(string from, string to) { […] }
[HttpPost]public void PostFlight([FromBody] Flight flight) { […] }
}
Web API mit Attribut-basierten Routen
Folie 54
[Route("api/[controller]")]public class FlightController: Controller{
// GET api/flight/{id}[HttpGet("{id}")]public Flight GetById(int id) { […] }
// GET api/flight/byRoute?from=...&to=...[HttpGet("byRoute")]public List<Flight> GetByRoute(string from, string to) { […] }
[HttpPost]public void PostFlight([FromBody] Flight flight) { […] }
}
12
Web API mit Attribut-basierten Routen
Folie 55
[Route("api/[controller]")]public class FlightController: Controller{
// GET api/flight/{id}[HttpGet("{id}")]public Flight GetById(int id) { […] }
// GET api/flight/byRoute?from=...&to=...[HttpGet("byRoute")]public List<Flight> GetByRoute(string from, string to) { […] }
// POST api/flight[HttpPost]public void PostFlight([FromBody] Flight flight) { […] }
}
DEMO
Page 56
13
MVC und Formatter konfigurieren
Folie 57
public class Startup{
public void ConfigureServices(IServiceCollection services){
services.AddMvc().AddJsonOptions(options => { […] }).AddMvcOptions(options => { […] });
}
[…]}
XML-Formatter
Package:
Microsoft.AspNetCore.Mvc.Formatters.Xml
XmlDataContractSerializerInputFormatter
XmlDataContractSerializerOutputFormatter
Folie 58
14
DEMO
Page 59
META-DATEN MIT SWAGGER
Page 60
15
Swagger
JSON-basiertes Metadatenformat für Web APIs
Weit verbreitet
Kein offizieller Standard
Folie 61
Swagger
Folie 62
JSON-Schema für Datentypen
Operationen (Verb, Url,
Datentypen für Anfrage und Antworten)
16
SWASHBUCKLE
Page 63
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 64
17
DEMO
Page 65
SECURITY
Page 66
18
Authentifizierung via Benutzer/Passwort
HTTP-BASIC via IIS oder HttpListener
Eigene HTTP-Middleware
Folie 67
Authentication via Tokens
JwtBearerAuthentication-Middleware
Prüft JWT-Tokens
Übernimmt Claims des JWT-Token in User-Objekt
Folie 68
19
OAuth2: Prinzipieller Ablauf
Folie 69
Client
Authorization-Server
Resource-Server
3. Token
Details legt Flow fest Ein zentrales Benutzerkonto
Nur Auth-Svr. kennt Passwort
Auth. von Client entkoppelt
Flexibilität durch Token
SPA: Kein Cookie: Kein CSRF
DEMO
Page 70
20
Zusammenfassung
Folie 82
X-Plattform Routing Formatter
Swashbuckle Self-Hosting Vereinheitlichung
Middleware
SOFTWAREarchitekt.at
ManfredSteyer
Kontakt