what's new in asp.net 4.5 (and webapi)

49
Novità in ASP.NET 4.5 Igor Antonacci – DotDotNet Member Luca Milan – DotDotNet Member

Upload: luca-milan

Post on 21-May-2015

1.392 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: What's new in Asp.Net 4.5 (and WebApi)

Novità in ASP.NET 4.5Igor Antonacci – DotDotNet MemberLuca Milan – DotDotNet Member

Page 2: What's new in Asp.Net 4.5 (and WebApi)

• DotDotNet Member

• Sviluppatore .NET a tutto “tondo”

• Twitter: @fewbit

• Email: [email protected]

Luca Milan

Page 3: What's new in Asp.Net 4.5 (and WebApi)

Agenda Cos’è ASP.NET 4.5

Le principali features in ASP.NET Web Forms 4.5

ASP.NET WebApi Framework (Big NEWS!)

Page 4: What's new in Asp.Net 4.5 (and WebApi)

Cos’è ASP.NET 4.5 Common Core Library

Web Forms 4.5 + MVC4 + Web Api Il nuovo Visual Studio 2012 Sotto-insieme di feature comuni per le due piattaforme In Place-Upgrade (sostituisce, aggiungendo funzionalità alla

precedente versione)

ASP.NET 4.5 Core

Web Forms 4.5 MVC 4 WEB API

Page 5: What's new in Asp.Net 4.5 (and WebApi)

Dove la cartella v4.5xxx?

<compilation debug="true" targetFramework="4.5"/>

<compilation debug="true" targetFramework="4.0"/>

Page 6: What's new in Asp.Net 4.5 (and WebApi)

Novità Visual Studio 2012

1. Page Inspector (Debug pagine web da VS)2. Supporto pieno ad HTLM5 (nuovi tag e

attributi)3. Smart Tag in modalità source (non solo desing)4. Intellisense avanzato per Javascript (goto

definition, references file unico, filtro per tipo dato…)

5. Supporto CSS3 (identazione gerarchica dei selettori, color picker embedded, snippets…)

6. «Extract to UserControl» per portare fuori il codice di un controllo da una pagina web

Page 7: What's new in Asp.Net 4.5 (and WebApi)

Novità principali di ASP.NET 4.5 Supporto all’Async (TPL / async – await)

Accesso asincrono ai Request – Response Stream Supporto async ai Moduli Http (HttpModules) Supporto async agli Handler Http (HttpHandlers)

Lazy Validation (ACHTUNG!) Anti-XSS Encoder Built-In Bundling & Minification

Page 8: What's new in Asp.Net 4.5 (and WebApi)

Async (Task Based) HttpModules (1) Utilizzano le TPL / async – await di C# 5 Utilizzano il pattern async per l’esecuzione di «task» di lunga durata (accesso risorse SO, chiamate WS)

Si utilizza l’helper class EventHandlerTaskAsyncHelper per la sottoscrizione …Async agli eventi della PipelineAddOn[EventNameXXX]Async(BeginEvent,EndEvent)

La scalabilità delle applicazioni aumenta (I thread vengono liberati e riutilizzati per altre richieste)

Page 9: What's new in Asp.Net 4.5 (and WebApi)

Async (Task Based) HttpModules (2)

Page 10: What's new in Asp.Net 4.5 (and WebApi)

Async Handlers (1) Si eredita da una classe base HttpTaskAsyncHandler (invece dell’interfaccia IHttpHandler)

Si fa l’override di ProcessRequestAsync

Page 11: What's new in Asp.Net 4.5 (and WebApi)

Async Handlers (2)

Page 12: What's new in Asp.Net 4.5 (and WebApi)

Demo – Async HTTPModules ed Handlers

Page 13: What's new in Asp.Net 4.5 (and WebApi)

Lazy Validation ASP.NET (<=4.0) verifica ciò che arriva tramite Headers, cookies, query string, FORM DATA per evitare «malicious code» (potenzialmente pericoloso)

La validazione avviene PRIMA che scatti la Pipeline e tramite una eccezione

ASP.NET 4.5 valida SOLO nel momento in cui ci accediamo

Dati non validati sono accessibili via Request.Unvalidated.Form[“…"]

Attivabile tramite Web.Config<httpRuntime requestValidationMode="4.5" />

Page 14: What's new in Asp.Net 4.5 (and WebApi)

Anti-Xss Encoder Supporto nativo all’encoding della libreria AntiXss

Si abilita tramite web.config<httpRuntime targetFramework="4.5“ encoderType="System.Web.Security.AntiXss.AntiXssEncoder"/>

Esegue l’encoding AntiXSS con i metodiHtmlEncode, HtmlFormUrlEncode, and HtmlAttributeEncodeXmlAttributeEncode and XmlEncodeUrlEncode and UrlPathEncodeCssEncode

Incremento della protezione in maniera trasparente (no librerie esterne)

Page 15: What's new in Asp.Net 4.5 (and WebApi)

Built-In Bundling & Minification Bundling = accorpamento di più risorse al fine di ridurre le chiamate HTTP Applicazioni Web Responsive

Minification = Eliminazione dei caratteri non utili al fine di minimizzare la dimensione del file (.js o .css) da trasferire

Introduzione del concetto di Bundle Url «virtuale» a cui risponde ASP.NET 4.5 con le risorse «Bundled & Minified» Risponde con i file «originali» se in debug="true" Risponde con UN unico «file» (minificato) se debug="false"

Page 16: What's new in Asp.Net 4.5 (and WebApi)

Demo – Anti-Xss / Bundling & Minification / Lazy Validation

Page 17: What's new in Asp.Net 4.5 (and WebApi)

ASP.NET WebForms 4.5

Page 18: What's new in Asp.Net 4.5 (and WebApi)

Novità in WebForms 4.5 Strongly-Typed Data-binding (mono e bi-direzionali)

Model Binding (quasi come ASP.NET MVC ) Unobtrusive Validation HTML5 Template built-in

Page 19: What's new in Asp.Net 4.5 (and WebApi)

Strongly-typed Data Binding – 1 Controlli ASP.NET con supporto al «tipo nativo» da bindare;

Introdotta la proprietà ItemType per specificare il tipo del modello;

MAI più stringhe del tipo <%#Eval("FirstName") %>

Si utilizza Item.FirstName (o BindItem.FirstName per il 2-way)

Page 20: What's new in Asp.Net 4.5 (and WebApi)

Strongly-typed Data Binding – 2

ASP.NET <=4.0 ASP.NET 4.5

Page 21: What's new in Asp.Net 4.5 (and WebApi)

Model Binding MVC-style Stanchi di chiamare DataBind() ? Vorreste un Vs. metodo per popolare i dati da dare in «pasto» al controllo?

Aggiunte le proprietà SelectMethod, UpdateMethod, DeleteMethod e InsertMethod (possono essere anche su assembly differenti non solo nel code-behind)

Specificate i relativi metodi che potranno ritornare IQueryable<T> (esecuzioni differita) Paginazione e Ordinamenti «built-in» nel controllo che raffina

query LINQ – nativa su DB se usiamo EF)

Page 22: What's new in Asp.Net 4.5 (and WebApi)

Demo – Strongly-Typed DataBindinge Model Binding

Page 23: What's new in Asp.Net 4.5 (and WebApi)

Unobtrusive Validation Validazione client-side via AJAX ...ora anche su WebForm (finalmente ) Si abilita via web.config:

<appSettings><add key="ValidationSettings:UnobtrusiveValidationMode" value="WebForms" />

Oppure tramite proprietà System.Web.UI.ValidationSettings.UnobtrusiveValidationMode

Page 24: What's new in Asp.Net 4.5 (and WebApi)

Supporto ad HTML5 Controlli Server dei nuovi «tag» HTML5

<video ... > <asp:TextBox TextMode > - supporto ai tipi di TextBox HTML5 (e.g. Date, Email

ecc.) FileUpload – supporto ai file multipli

Page 25: What's new in Asp.Net 4.5 (and WebApi)

Web Api Focus Framework per lo Sviluppo ed il Consumo di servizi HTTP (RestFul e non solo...);

Creata seguendo principi di programmazione AGILI  e SOLIDI;

Trasforma il protocollo l'HTTP in una piattaforma di programmazione.

E’ Open Source http://aspnetwebstack.codeplex.com

Page 26: What's new in Asp.Net 4.5 (and WebApi)

Cos’è REST Sta per: REpresentational State Transfer. E' uno stile architetturale (diverso da SOAP che è un protocollo)

E’ stato discusso nel 2000 da Roy Fielding

Page 27: What's new in Asp.Net 4.5 (and WebApi)

Prima di Web Api nel mondo .NET non erano molte le alternative per sviluppare servizi REST:

1. OpenRASTA

2. ServiceStack

3. WCF - REST Toolkit e/o WCF Web Api

Le soluzioni basate su WCF erano funzionali, ma macchinose (es. configurazione complessa) e poco flessibili;

L'approccio REST con .NET

Page 28: What's new in Asp.Net 4.5 (and WebApi)

1. NON è basata su ASP.NET MVC (no System.Web.Mvc.dll)

2. Non è accoppiata al layer di HOSTING (no System.Web.dll)

Web Api miti da «sfatare»

Progetto: System.Web.Http >

Page 29: What's new in Asp.Net 4.5 (and WebApi)

1. Framework per lo Sviluppo ed il Consumo di servizi HTTP;

2. Distribuita con ASP.NET MVC4 (template di progetto MVC) ma disponibile via NuGet (utilizzabile con WebForms, WinServices, ConsoleApp, ecc…);

3. Poliedrica, perché possiamo sviluppare servizi web anche non completamente RESTFul, la WebAPI nasconde le complessità del protocollo HTTP;

Web Api (1)

Page 30: What's new in Asp.Net 4.5 (and WebApi)

1. Usa gli strumenti consolidati di ASP.NET (Model Binding, Routing);

2. Pensata con un approccio FRICTION-LESS (Zero Configuration, Zero Attributi)

3. Sfrutta il paradigma Convention-Over-Configuration(Selezione Automatica dei Formatters e Mapping delle Action)

4. Ricca di punti di estensibilità(Formatters, MessageHandlers, Filters, IOC)

5. Query Composition (Supporto Odata in fase di rilascio)

Web Api Framework (2)

Page 31: What's new in Asp.Net 4.5 (and WebApi)

La posizione nello stack ASP.NET

Page 32: What's new in Asp.Net 4.5 (and WebApi)

Per implementare un servizio è necessario:

1. Creare una classe controller ereditando da: ApiController;

2. Definire i Metodi ed abbinarli ad un verbo HTTPEs. PostBook, GetBooks() / convention over confEs. [HttpPost] SaveBook() / attribute decoration

3. Implementare i Metodi in modo che restituiscano al chiamante un oggetto serializzabile (DTO, HttpResponseMessage o JsonValue);

Sviluppare un Servizio con Web Api

Page 33: What's new in Asp.Net 4.5 (and WebApi)

Demo – webapi

Implementare il Controller

Page 34: What's new in Asp.Net 4.5 (and WebApi)

CONTROLLERBinding,Filtri,For

matter

PIPELINE DelegateHandle

r

HOSTHttpConfiguratio

n

Web Api - Layered View

Page 35: What's new in Asp.Net 4.5 (and WebApi)

La WebApi può essere ospitata in 2 modi differenti:

1. Self Hosting (basato su WCF ottima per Console App o Win Service)

2. WebHosting (basato su ASP.NET / IIS)

3. Potenzialmente potremmo creare altri Host (Azure, OWIN, ecc…)

Entrambi le soluzioni hanno in comune la classe HttpConfiguration

Hosting

Page 36: What's new in Asp.Net 4.5 (and WebApi)

Demo – webapiSelfHosting

Page 37: What's new in Asp.Net 4.5 (and WebApi)

Un message handler è una classe che prende in input una richiesta HTTP e restituisce in output un risposta HTTP (aysnc way).

Le classi HttpRequestMessage e HttpResponseMessage sono le primitive messe a disposizione dal framework per "manipolare" richieste e risposte.

Gli handlers sono concatenati, il primo riceve la richiesta, la processa e la passa all’handler seguente, fino ad arrivare ad un punto in cui viene creata la risposta che ripassa «al contrario» nella catena fino al client.

Message Handlers (1)

Page 38: What's new in Asp.Net 4.5 (and WebApi)

I messaggi che arrivano da Internet vengono presi e "pompati" all'interno del "canale" dei message handlers

Message Handlers (2)

protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)

Page 39: What's new in Asp.Net 4.5 (and WebApi)

Tutti gli handlers derivano dalla classe base HttpMessageHandler. 

Vi sono handlers built-in o server-side message handlers:

1. HttpServer => prende in carico la request dal layer HOST

2. QUI CI SONO GLI HANDLERS CUSTOM ( I NOSTRI)

3. HttpRoutingDispatcher => redireziona la request in base alla route.

4. HttpControllerDispatcher => invia la request al layer Controller

Gli handlers possono essere registrati a livello globale oppure per route.

Message Handlers (3)

Page 40: What's new in Asp.Net 4.5 (and WebApi)

Demo – webapi

Message Handlers

Page 41: What's new in Asp.Net 4.5 (and WebApi)

Meccanismo ereditato da ASP.NET permette di mappare un controller con una risorsa e i suoi metodi con i verbi http.

template: api/{controller}/{id}

Per i metodi possiamo usare gli attributi AcceptVerbs, HttpPost, HttpGet, ecc... o le convenzioni. Possiamo personalizzare il routing con i default values e i constraints.

Routing

Page 42: What's new in Asp.Net 4.5 (and WebApi)

La WebApi serializza automaticamente le risposte in JSON (default) e/o in XML sfruttando il meccanismo di content-negotiation dell'HTTP.

Accept : app/json => JsonMediaTypeFormatter Accept : app/xml => XmlMediaTypeFormatter Accept : */* => [XXX]MediaTypeFormatter

Per ogni altra esigenza possiamo scrivere "formatters" custom tramite la classe MediaTypeFormatters (Sync o Async).

Formattazione

Page 43: What's new in Asp.Net 4.5 (and WebApi)

I parametri dei metodi possono essere "popolati" da vari sorgenti come l’URI o il BODY della richiesta HTTP attraverso il meccanismo di "Model Binding" tipico di ASP.NET MVC.

I tipi semplici leggiamoli dall’URI i tipi complessi dal BODY!

In modo analogo ad MVC possiamo usare gli attributi di validazione sui nostri Models (aka DataAnnotations)

Model Binding e Validazione

Page 44: What's new in Asp.Net 4.5 (and WebApi)

Demo – webapi

model binding, validazione, formattazione

Page 45: What's new in Asp.Net 4.5 (and WebApi)

Aiutano a gestire i "cross cutting concerns" (validazione, logging, security). Possono essere configurati a livello: Applicazione / Controller / Azione

Ci sono 3 tipi di filtri:

Authorization - > prima del binding dei parms

Action -> dopo il binding dei params

Exception -> gestiscono le eccezioni generate nel layer Controller

Filtri

Page 46: What's new in Asp.Net 4.5 (and WebApi)

Progettata per ridurre le frizioni:

1. Nessuna classe statica per gestire il "context" HTTP;

2. Facilmente testabile, i componenti dell'API espongono le proprie dipendenze tramite parametri nei propri costruttori;

3. Presenza di un DependencyResolver (scoped via IDependencyScope) per facilitare l'iniezione di servizi e componenti nel costruttore del controller (composition root);

4. Esistono già implementazioni per i maggiori Container (AutoFac, Ninject, ecc…)

Testabilità e IOC

Page 47: What's new in Asp.Net 4.5 (and WebApi)

1. Supporto ODATA (in preview per ora, ma a breve integrato in modo ufficiale)

2. Filtro IQueryable sui metodi che devono supportare ODATA

3. Possibilità di comporre le query lato client (QueryString) e di trasmetterle al Server per l’esecuzione

Query Composition

Page 48: What's new in Asp.Net 4.5 (and WebApi)

Demo – webapiFiltri ed IOC

Page 49: What's new in Asp.Net 4.5 (and WebApi)

Q & A

Grazie a tutti per l’attenzione!