@Web@Work
ASP.NET WebForm 4.5: what's new!!
Massimo Bonannihttp://codetailor.blogspot.com
[email protected]@massimobonanni
@Web@Wor
k
Moduli ed Handler asincroniLazy Request validationAnti-Cross Site ScriptingBundling e MinificationData Control tipizzati e Model BindingUnobtrusive validation…..dulcis in fundo
Agenda
@Web@Wor
k
Ogni chiamata ad una risorsa Web è gestita da un thread.Il thread è occupato fino a che la richiesta non è servita.Il numero di thread a disposizione dell’application pool è limitato.Le performance possono degradare rapidamente all’aumentare delle richieste.
Moduli e Handler asincroni: perché?
@Web@Wor
k
In un modulo asincrono il thread che prende in carico la richiesta non è detto sia il thread che la porta a compimento.
In questo modo i thread vengono presto rilasciati e la scalabilità migliore
Moduli asincroni
@Web@Wor
k
La chiave di volta per ottenere l’asincronicità dei moduli è l’introduzione della parola chiave Async e dell’operatore Await.
Si realizza un normale HttpModule ASP.NET e si utilizza la EventHandlerAsyncHelper per la sottoscrizione degli eventi.
Moduli asincroni
@Web@Wor
k
Anche per gli Handler vale il discorso fatto per i Moduli.
Se liberiamo il thread che ha in carico la richiesta dell’handler, otteniamo scalabilità!!!
Handler asincroni
@Web@Wor
k
Per implementare un Handler asincrono si utilizza la classe base HttpTaskAsyncHandler anziché implementare l’interfaccia IHttpHandler.
Eseguiamo l’override del metodo ProcessRequestAsync (che, guarda caso ritorna un task ) ed il gioco è fatto!
Handler asincroni
@Web@Wor
kDemo
Moduli ed
Handler Asincro
ni
@Web@Wor
k
ASP.NET verifica header, forms, querystring e cookie ad ogni richiesta.Se viene trovato un contenuto potenzialmente pericoloso…….
Lazy Request Validation
@Web@Wor
k
ASP.NET 4.5 introduce la Lazy Request Validation:
• Si attiva nel web.config:<httpRuntime requestValidationMode="4.5" />
• ASP.NET controlla i dati solo quando effettivamente li richiediamo.• Request.Form("ID") non fa scattare il controllo su tutti i valori
della collection Form
• Da usare con cautela, se abusato può provocare catastrofi!!!
Lazy Request Validation
@Web@Wor
kDemo
Lazy Request Validati
on
@Web@Wor
k
ASP.NET 4.5 integra nativamente la libreria Anti-Cross Site Scripting (AntiXSS)Il Cross Site Scripting è una vulnerabilità che si può riscontrare nei siti web e che favorisce gli attacchi in cui si inietta del codice client-side pericoloso.La libreria AntiXSS aiuta nello scongiurare la vulnerabilità da Cross Site Scripting
Anti-Cross Site Scripting (AntiXSS)
@Web@Wor
k
La libreria non è attiva di default (è attiva nei nuovi progetti) e si può attivare con
<httpRuntime encoderType="System.Web.Security.AntiXss.AntiXssEncoder" />
Mette a disposizione una serie di metodi per encodare stringhe per diversi ambiti (HTML, CSS, Url, XML, etc., etc.,
Anti-Cross Site Scripting (AntiXSS)
@Web@Wor
kDemo
AntiXSSLibrary
@Web@Wor
k
Una pagina web può avere diversi file CSS e Javascript.Ogni file è una richiesta al server.La pagina non può essere renderizzata fino a che non sono disponibili tutti i file.
Il Bundling consente di combinare assieme più files in un’unica richiesta.
Bundling e Minification
@Web@Wor
k
Un file CSS o Javascript, oltre che informazioni utili allo scopo (classi di stile e istruzioni) contiene caratteri inutili (spazi, ritorni a capo, etc., etc.) che occupano spazio e banda.
La funzione di Minification compatta il contenuto di un file togliendo ciò che non serve allo scopo.
Bundling e Minification
@Web@Wor
k
Bundling e Minification assieme riducono il numero di richieste al server e la quantità di dati che transitano rendendo più veloce la risposta del browser
Le due funzionalità sono presenti, «di serie», in ASP.NET 4.5 (sia Web Form che MVC).
Bundling e Minification
@Web@Wor
k
Le classi deputate alle funzionalità di Bundling e Minification sono contenute nell’assembly Microsoft.Web.Optimization.dll e disponibili tramite NuGet.
Bundling e Minification
@Web@Wor
kDemo
Bundling &
Minification
@Web@Wor
k
No More <%#Eval("ID")%> !!!!
Le stringhe vanno evitate come la peste perché eventuali errori appaiono solo a runtime!!!
Data Control tipizzati
@Web@Wor
k
Nuovi controlli tipizzati:
<asp:Repeater ModelType="Customer"…><ItemTemplate>
<%#Item.ID%></ItemTemplate>
</asp:Repeater>
Nel binding Two-Way usiamo BindItem anziché Item.
Data Control tipizzati
@Web@Wor
k
E’ stato introdotto il concetto di Model Binding: • possiamo legare la nostra Web Form ad
un modello (in stile MVC).
Il model binding lavora con IQueryable(Of T) • Ordinamento e paginazione• Se si usa EF, viene generata ad hoc la
query
Model Binding
@Web@Wor
kDemo
Data Control
& Model
Binding
@Web@Wor
k
ASP.NET 4.5 introduce i validator unobtrusive stile MVC anche per le Web Form.
Il javascript generato dai validatori ASP.NET ≤4.0 non è mai stato aggiornato ed è decisamente vetusto!!
Nella nuova versione meno javascript da scaricare!!!
Unobtrusive validation
@Web@Wor
k
I nuovi validator fanno uso degli attributi custom HTML "data-".
Nei progetti ASP.NET 4.5 vengono sempre utilizzati i nuovi validatori.
Nei progetti ASP.NET <4.5, si attivano con:• Globalmente, nel web.config:
<add name="ValidationSettings:UnobtrusiveValidationMode" value="WebForms" />
• Sulla singola pagina impostando la proprietà Page.UnobtrusiveValidationMode su UnobtrusiveValidationMode.WebForm
Unobtrusive validation
@Web@Wor
kDemo
Unobtrusive
Validation
@Web@Wor
k
I controlli nativi HTML5 (ad esempio il <video>) hanno la controparte server
Il controllo TextBox ha una proprietà TextMode per gestire i nuovi tipi di input HTML5:
<asp:TextBox runat="server" TextMode="Email" />
Lo schema di default di una pagina creata con VS è quello di HTML5:
<!DOCTYPE html>
Dulcis in fundo
@Web@Wor
kQ&A
Web@WorkGrazie agli sponsor