5. 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. 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
10. 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. 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. 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. 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
15. 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. 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
18. 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. 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