Download - ASP.NET Core 1 for MVC- and WebAPI-Devs

Transcript

1

ASP.NET Core 1 (formerly ASP.NET 5)What has changed for MVC and Web API devs?

Manfred Steyer

ManfredSteyer

About me …

Manfred Steyer

SOFTWAREarchitekt.at

Trainer & Consultant

Angular

Server-Side .NET

Page 2

2

Goal

Overview of changes for

MVC- and Web API-Devs regarding

ASP.NET Core

Folie 3

Didactics

Slides

Samples

Folie 9

3

Contents

Overview of ASP.NET Core 1

Bootstrapping

Web Apps

Web APIs

Folie 11

OVERVIEW OF ASP.NET CORE

Page 22

4

.NET Core

Folie 24

[http://www.hanselman.com/]

Advantages

Folie 25

X-Plattform Lightweight NuGet

Side-by-Side

Self-HostingF5-Compile-to-Memory

5

Hosting

Kestrel (X-Plattform, Self-Host)

WebListener (Windows, Self-Host)

IIS Kestrel

Nginx Kestrel

Folie 26

Why a new ASP.NET?

Folie 27

ASP.NET Frameworks

System.Web

IIS

6

System.Web

Features of System.Web have to be

reimplemented

Sessions, Caching, Configuration, Routing

Consequence: Breaking-Changes

Folie 30

Doublings today

Web API MVC Web Pages

7

ASP.NET MVC Core 1

Unification of MVC, Web API

and (in future) Web Pages

Uniform concepts for Controllers, Views,

Dependency-Injection, Routing, Filters etc.

Migration

Code needs adaptation

But: Current framework-versions will be maintained

Saying that: WCF and Web Forms wont't be

migrated to Core

WCF Web Forms Web API 2MVC 5

.NET 4.x / "Full CLR"

8

ASP.NET CORE 1:BOOTSTRAPPING

Page 34

Middleware-Components

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

9

Configuring the Pipeline

Folie 36

public class Startup{

[…]

public void Configure(IApplicationBuilder app) {

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

}}

Configuration considering the Environment

Folie 37

public void Configure(IApplicationBuilder app, IHostingEnvironment env)

{[…]

if (env.IsDevelopment()) {app.UseDeveloperExceptionPage();

}else {

app.UseExceptionHandler("/Home/Error");}

[…]}

10

Configuring Services

Folie 38

public class Startup{

public void ConfigureServices(IServiceCollection services){

[…]services.AddMvc()[…]

}

[…]}

DEMO

Page 40

11

TAG-HELPER

Page 45

@model IEnumerable<MvcApplication.Models.Flight>

[…]

@foreach (var item in Model) {<tr>

<td>@item.Von

</td><td>

@item.Nach</td><td>

@Html.ActionLink("Edit", "Edit", "Home", new { id = "1" }, null)

</td></tr>

}

HtmlHelpers in ASP.NET MVC 5

12

@model IEnumerable<MvcApplication.Models.Flight>

[…]

@foreach (var item in Model) {<tr>

<td>@item.Von

</td><td>

@item.Nach</td><td>

<a asp-controller="Home"asp-action="Edit"asp-route-id="1" class="navbar-brand">Edit</a>

</td></tr>

}

Tag-Helpers

Using TagHelpers

@addTagHelper "*, Microsoft.AspNetCore.Mvc.TagHelpers"

Global: Views/_ViewImports.cshtml

Folie 48

13

WEB APIS WITH MVC CORE 1

Page 50

Web APIs in MVC Core 1

No own Routing for Web APIs

Same concept as for MVC

No Conventions for HTTP Verb,

like GetAll() GET, PostData() POST

Routing doesn't consider URL-Parameters to select

an action-method

But: WebApiCompatShim

Folie 51

14

Web API with Attribute-based Routes

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

}

Web API with Attribute-based Routes

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

}

15

Web API with Attribute-based Routes

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

}

Web API with Attribute-based Routes

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

}

16

DEMO

Page 56

Configuring MVC and Formatters

Folie 57

public class Startup{

public void ConfigureServices(IServiceCollection services){

services.AddMvc().AddJsonOptions(options => { […] }).AddMvcOptions(options => { […] });

}

[…]}

17

XML-Formatter

Package:

Microsoft.AspNetCore.Mvc.Formatters.Xml

XmlDataContractSerializerInputFormatter

XmlDataContractSerializerOutputFormatter

Folie 58

DEMO

Page 59

18

Summary

Folie 80

X-Plattform F5-Compile Side-by-Side

Self-HostingDI, DI

everywhere…Tag Helpers

Summary

Folie 81

Unificationof MVC and

Web API

High-Level-APIs quitethe same

MVC-Style Routing

Low-Level APIs

reworked

Currentversions still maintained

19

[email protected]

SOFTWAREarchitekt.at

ManfredSteyer

Contact