SlideShare a Scribd company logo
1 of 37
Download to read offline
saturday 2018
ASP.NET CORE
DOVE SIAMO ARRIVATI
Andrea Dottor
@dottor
Millions of developers have used (and continue to use) ASP.NET 4.x to create web apps. ASP.NET
Core is a redesign of ASP.NET 4.x, with architectural changes that result in a leaner, more modular
framework.
ASP.NET Core provides the following benefits:
 A unified story for building web UI and web APIs.
 Architected for testability.
 Razor Pages makes coding page-focused scenarios easier and more productive.
 Ability to develope and run on Windows, macOS, and Linux.
 Open-source and community-focused.
 Integration of modern, client-side frameworks and development workflows.
 A cloud-ready, environment-based configuration system.
 Built-in dependency injection.
 A lightweight, high-performance, and modular HTTP request pipeline.
 Ability to host on IIS, Nginx, Apache, Docker, or self-host in your own process.
 Side-by-side app versioning when targeting .NET Core.
 Tooling that simplifies modern web development.
WHY USE ASP.NET CORE?
https://docs.microsoft.com/en-us/aspnet/core/?view=aspnetcore-2.1
ASP.NET Core 2.x can target .NET Core or .NET Framework. ASP.NET Core
apps targeting .NET Framework aren't cross-platform—they run on Windows
only. Generally, ASP.NET Core 2.x is made up of .NET Standard libraries. Apps
written with .NET Standard 2.0 run anywhere that .NET Standard 2.0 is
supported.
ASP.NET Core 2.x is supported on .NET Framework versions compatible
with .NET Standard 2.0:
 .NET Framework 4.7.1 and later is strongly recommended.
 .NET Framework 4.6.1 and later.
ASP.NET Core 3.0 and later will only run on .NET Core.
ASP.NET CORE TARGETING .NET FRAMEWORK
https://docs.microsoft.com/en-us/aspnet/core/?view=aspnetcore-2.1
Cross-platform. Gira su macOS, Linux, e Windows.
Migliori performance
Possibilità di avere applicazioni Side-by-side che utilizzano versioni diverse
del Framework
Nuove API
Open source
VANTAGGI DI .NET CORE RISPETTO AL .NET FRAMEWORK
CONCLUSIONI
Supporto "facilitato" a WCF
 Ad oggi la configurazione va spostata nel codice
Identity Server / Autenticazione OAuth
 Ci si deve appoggiare a componenti di terze parti
COSA MANCA
TEMPLATE DI PROGETTO
TEMPLATE DI PROGETTO
Razor Pages is the recommended way to build
UI for web apps in ASP.NET Core
SECURE BY DEFAULT
Nuovo middleware per forzare un redirect da HTTP a HTTPS
 app.UseHttpsRedirection();
Se l'app è dietro ad un proxy che gestisce in automatico il redirect verso HTTPS,
questo middleware non è necessario
IIS10 gestisce in modo automatico il redirect verso HTTPS
 <hsts enabled="true" max-age="31536000" redirectHttpToHttps="true" />
In versioni precedenti ad IIS10 è possibile installare il modulo HttpRedirect
HTTPS
Nuovo middleware per forzare un redirect da HTTP a HTTPS
 app.UseHttpsRedirection();
Se l'app è dietro ad un proxy che gestisce in automatico il redirect verso HTTPS,
questo middleware non è necessario
IIS10 gestisce in modo automatico il redirect verso HTTPS
 <hsts enabled="true" max-age="31536000" redirectHttpToHttps="true" />
In versioni precedenti ad IIS10 è possibile installare il modulo HttpRedirect
HTTPS
OWAST (Open Web Application Security Project) lavora agli standard HSTS per
aumentare la sicurezza delle applicazioni web
HSTS si basa sullo scambio dell'header 'Strict-Transport-Security' che informa il
browser di utilizzare sempre connessioni https verso l'applicativo/dominio/path
 Strict-Transport-Security: max-age=31536000; includeSubDomains;
Esiste un middleware per abilitare questa funzionalità
 app.UseHsts();
Da non utilizzare in sviluppo
 Di default il browser mantiene l'informazione per 30 giorni (parametrizzabile)
HTTP STRICT TRANSPORT SECURITY PROTOCOL (HSTS)
https://www.owasp.org/index.php/HTTP_Strict_Transport_Security_Cheat_Sheet
Non utilizzare RequireHttpsAttribute nei controller delle API
Alcuni browser o applicazioni non gestiscono il redirect da HTTP a HTTPS
 Chiudere la connessione e ritornare un 400 (Bad Request)
Le API non dovrebbero essere in ascolto in HTTP ma solo in HTTPS
REDIRECT HTTP VERSO HTTPS
GDPR
I progetti/template di default sono già predisposti per visualizzare la Cookie Privacy
Policy.
 Nel file startup.cs è possibile configurare il tutto.
 Viene aggiunta una nuova partial contenente il testo da visualizzare nella barra
 _CookieConsentPartial.cshtml
 Pagina Pages/Privacy.cshtml con il testo della Privacy Policy
Se l'utente non accetta il consenso, solo i cookie marcati come essenziali vengono
inviati al client
TempData funziona con i cookie, e se il tracking è disabilitato, questo non viene
creato
 Forzare in configurazione che il cookie del TempData è essenziale
La sessione funziona solamente con tracking abilitato.
GDPR - COOKIE POLICY
CREATE COOKIE ESSENTIAL
Un utente autenticato può ora cancellare il proprio account o scaricare un
file contenente le proprie informazioni personali.
E' ora presente un attributo utile a decorare le proprietà dell'utente che
contengono dati personali
 PersonalDataAttribute
Il download produce un json con le sole proprietà marcate con l'attributo
PersonalData
 Eventuali altre informazioni vanno gestite manualmente
GDPR - PERSONAL DATA
PERSONALDATAATTRIBUTE
ASP.NET IDENTITY
Con ASP.NET Core 2.1, ASP.NET Identity viene ora iniettata come Razor Class
Library.
 Il codice/view/pagine non sono presenti all'interno del progetto ma sono in un
assembly separato.
 Meno codice di default presente all'interno del progetto
Viene data la possibilità di personalizzare le pagine esistenti utilizzando lo
scaffolding, e quindi facendoci generare la pagina che vogliamo editare
 Se una pagina è presente all'interno del progetto (nel path corretto), questa
sostituisce quella di default.
IDENTITY UI LIBRARY & SCAFFOLDING
Identity viene esposto come un'area dal nome "Identity"
 Gli url alle varie pagine cambia
ASP.NET IDENTITY AREA
IDENTITY UI LIBRARY & SCAFFOLDING
API
Attributo che viene valutato se abilitata la compatibilità con la versione 2.1
 services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
Validazione automatica del model
Se non rispetta la validazione, viene automaticamente ritornato uno status code 400 Bad
Request al client
Si evita di dover inserire sempre lo stesso codice in ogni action delle API
Utilizzo degli RouteAttribute diventa una necessità
"Actions are inaccessible via conventional routes defined in UseMvc or by
UseMvcWithDefaultRoute in Startup.Configure."
Inference rules per gli argomenti delle action
Non è più obbligatorio specificare gil atributi FromBody, FromRoute, … per gli argomenti nel
caso rispettino le convenzioni
ANNOTATION API WITH APICONTROLLERATTRIBUTE
Attributo che viene valutato se abilitata la compatibilità con la versione 2.1
 services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
Validazione automatica del model
 Se non rispetta la validazione, viene automaticamente ritornato uno status code 400 Bad
Request al client
 Si evita di dover inserire sempre lo stesso codice in ogni action delle API
Utilizzo degli RouteAttribute diventa una necessità
 "Actions are inaccessible via conventional routes defined in UseMvc or by
UseMvcWithDefaultRoute in Startup.Configure."
Inference rules per gli argomenti delle action
 Non è più obbligatorio specificare gil atributi FromBody, FromRoute, … per gli argomenti nel
caso rispettino le convenzioni
ANNOTATION API WITH APICONTROLLERATTRIBUTE
Se abilitata la compatibilità con la versione 2.1
 services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
Validazione automatica del model
 Se non rispetta la validazione, viene automaticamente ritornato uno status code 400 Bad
Request al client
 Si evita di dover inserire sempre lo stesso codice in ogni action delle API
Utilizzo degli RouteAttribute diventa una necessità
 "Actions are inaccessible via conventional routes defined in UseMvc or by
UseMvcWithDefaultRoute in Startup.Configure."
Inference rules per gli argomenti delle action
 Non è più obbligatorio specificare gil atributi FromBody, FromRoute, … per gli argomenti nel
caso rispettino le convenzioni
APICONTROLLER
Se abilitata la compatibilità con la versione 2.1
 services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
Validazione automatica del model
 Se non rispetta la validazione, viene automaticamente ritornato uno status code 400 Bad
Request al client
 Si evita di dover inserire sempre lo stesso codice in ogni action delle API
Utilizzo degli RouteAttribute diventa una necessità
 "Actions are inaccessible via conventional routes defined in UseMvc or by
UseMvcWithDefaultRoute in Startup.Configure."
Inference rules per gli argomenti delle action
 Non è più obbligatorio specificare gil atributi FromBody, FromRoute, … per gli argomenti nel
caso rispettino le convenzioni
15/09/2018 28
APICONTROLLER
[FromBody] is inferred for complex type parameters.
[FromForm] is inferred for action parameters of type IFormFile and IFormFileCollection.
[FromRoute] is inferred for any action parameter name matching a parameter in the route
template.
[FromQuery] is inferred for any other action parameters.
MICROSOFT.ASPNETCORE.APP
Il metapackage Microsoft.AspNetCore.All è considerato come deprecato, a
favore di Microsoft.AspNetCore.App
Microsoft.AspNetCore.App:
 Rimosse librerie di terze-parti tranne Json.NET, Remotion.Linq e IX-Async.
 Include tutti i packages di ASP.NET Core team
 Include tutti I packages di Entity Framework Core team.
We recommend migrating to the Microsoft.AspNetCore.App metapackage
for 2.1 and later. To keep using the Microsoft.AspNetCore.All metapackage
and ensure the latest patch version is deployed
DEPRECATE MICROSOFT.ASPNETCORE.ALL
Sono stati rimossi anche packages Microsoft ma che non sono mantentui dai team
di ASP.NET e Entity Framework:
 Microsoft.Data.Sqlite
 Microsoft.Data.Sqlite.Core
 Microsoft.EntityFrameworkCore.Sqlite
 Microsoft.EntityFrameworkCore.Sqlite.Core
 Microsoft.Extensions.Caching.Redis
 Microsoft.AspNetCore.DataProtection.AzureStorage
 Microsoft.Extensions.Configuration.AzureKeyVault
 Microsoft.AspNetCore.DataProtection.AzureKeyVault
 Microsoft.AspNetCore.Identity.Service.AzureKeyVault
 Microsoft.AspNetCore.AzureKeyVault.HostingStartup
 Microsoft.AspNetCore.ApplicationInsights.HostingStartup
MICROSOFT.ASPNETCORE.APP
Update the project file to use 2.1 versions
 Change the target framework to .NET Core 2.1
 Replace the package reference for Microsoft.AspNetCore.All with a package
reference for Microsoft.AspNetCore.App
 Remove references to <DotNetCliToolReference> elements for the following
packages. These tools are bundled by default in the .NET Core CLI and don't need
to be installed separately.
ASP.NET Core 2.1 provides ASP.NET Core Identity as a Razor Class Library
(RCL).
 Identity 2.1 exposes endpoints with the Identity area
MIGRATE FROM ASP.NET CORE 2.0 TO 2.1
 ASP.NET Core Web Project template now updated to Bootstrap 4 that gives a fresh look to
the page. Most of extra elements are removed. Default UI also supports Bootstrap 4.
 For SPA based templates now support Angular 6
 Parameter Transformers to routing
 Link Generation
 Validation Performance Improvements
 API Controller Conventions
 HTTP/2 support is added.
 IIS in-process hosting model is added for IIS.
 Health checks framework is integrated now to monitor health of APIs and apps.
 Endpoint routing is introduced and takes care of several routing problems.
 ASP.NET Core SignalR Java client is added.
ASP.NET CORE 2.2 ROADMAP
https://blogs.msdn.microsoft.com/webdev/2018/08/22/asp-net-core-2-2-0-preview1-now-available/
https://www.youtube.com/watch?v=DDBmvOPfqzA
Some notable sub-components will be removed from the ASP.NET Core shared framework in
3.0
 Json.NET (Newtonsoft.Json)
 Entity Framework Core (Microsoft.EntityFrameworkCore.*)
ASP.NET Core will only run on .NET Core starting from 3.0.
 Microsoft.Extensions packages (such as logging, dependency injection, and config) will continue
to support .NET Standard
 Entity Framework Core will continue to support .NET Standard
Delivering more value with focused 3rd party open-source integration
 IdentityServer
 Swashbuckle
 NSwag
 AutoRest
[…]
ASP.NET CORE 3 ROADMAP
https://blogs.msdn.microsoft.com/webdev/2018/10/29/a-first-look-at-changes-coming-in-asp-net-core-3-0/
MA NON FINISCE QUI
SignalR
 Sessione di Emanuele Bartolesi
Blazor
 Sessione di Andrea Agnoletto
Razor Pages
 Sessione mia ☺
ALTRE NOVITÀ DI ASP.NET CORE:
37
www.dottor.net
andrea@dottor.net
@dottor
Andrea Dottor
Microsoft MVP Developer Technologies
CONTATTI

More Related Content

What's hot

Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Andrea Dottor
 
Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0Andrea Dottor
 
Dal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developersDal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developersAndrea Dottor
 
Blazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web FormBlazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web FormAndrea Dottor
 
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del webASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del webAndrea Dottor
 
Sviluppare Azure Web Apps
Sviluppare Azure Web AppsSviluppare Azure Web Apps
Sviluppare Azure Web AppsAndrea Dottor
 
What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012Andrea Dottor
 
ASP.NET MVC: sfruttare la piattaforma al 100%
ASP.NET MVC: sfruttare la piattaforma al 100%ASP.NET MVC: sfruttare la piattaforma al 100%
ASP.NET MVC: sfruttare la piattaforma al 100%DomusDotNet
 
Windows azure - abbattere tempi e costi di sviluppo
Windows azure - abbattere tempi e costi di sviluppoWindows azure - abbattere tempi e costi di sviluppo
Windows azure - abbattere tempi e costi di sviluppoAndrea Dottor
 
Blazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiBlazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiAndrea Dottor
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campusDotNetCampus
 
2015.04.23 Azure Community Bootcamp 2015 Keynote Italy
2015.04.23 Azure Community Bootcamp 2015 Keynote Italy2015.04.23 Azure Community Bootcamp 2015 Keynote Italy
2015.04.23 Azure Community Bootcamp 2015 Keynote ItalyMarco Parenzan
 
Javascript task automation
Javascript task automationJavascript task automation
Javascript task automationAntonio Liccardi
 
Xamarin.Forms Performance Tips & Tricks - Francesco Bonacci - Codemotion Rome...
Xamarin.Forms Performance Tips & Tricks - Francesco Bonacci - Codemotion Rome...Xamarin.Forms Performance Tips & Tricks - Francesco Bonacci - Codemotion Rome...
Xamarin.Forms Performance Tips & Tricks - Francesco Bonacci - Codemotion Rome...Codemotion
 
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...Andrea Balducci
 
Web Api – The HTTP Way
Web Api – The HTTP WayWeb Api – The HTTP Way
Web Api – The HTTP WayLuca Milan
 
Del furia signalr-to-the-max
Del furia   signalr-to-the-maxDel furia   signalr-to-the-max
Del furia signalr-to-the-maxDotNetCampus
 
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVM
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVMRealizzare applicazioni cross-platform con Xamarin e il pattern MVVM
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVMCodemotion
 
Alla scoperta di gRPC
Alla scoperta di gRPCAlla scoperta di gRPC
Alla scoperta di gRPCAndrea Dottor
 

What's hot (20)

Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
 
Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0
 
Dal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developersDal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developers
 
Blazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web FormBlazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web Form
 
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del webASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
 
Sviluppare Azure Web Apps
Sviluppare Azure Web AppsSviluppare Azure Web Apps
Sviluppare Azure Web Apps
 
What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012
 
jQuery
jQueryjQuery
jQuery
 
ASP.NET MVC: sfruttare la piattaforma al 100%
ASP.NET MVC: sfruttare la piattaforma al 100%ASP.NET MVC: sfruttare la piattaforma al 100%
ASP.NET MVC: sfruttare la piattaforma al 100%
 
Windows azure - abbattere tempi e costi di sviluppo
Windows azure - abbattere tempi e costi di sviluppoWindows azure - abbattere tempi e costi di sviluppo
Windows azure - abbattere tempi e costi di sviluppo
 
Blazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiBlazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi reali
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campus
 
2015.04.23 Azure Community Bootcamp 2015 Keynote Italy
2015.04.23 Azure Community Bootcamp 2015 Keynote Italy2015.04.23 Azure Community Bootcamp 2015 Keynote Italy
2015.04.23 Azure Community Bootcamp 2015 Keynote Italy
 
Javascript task automation
Javascript task automationJavascript task automation
Javascript task automation
 
Xamarin.Forms Performance Tips & Tricks - Francesco Bonacci - Codemotion Rome...
Xamarin.Forms Performance Tips & Tricks - Francesco Bonacci - Codemotion Rome...Xamarin.Forms Performance Tips & Tricks - Francesco Bonacci - Codemotion Rome...
Xamarin.Forms Performance Tips & Tricks - Francesco Bonacci - Codemotion Rome...
 
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...
 
Web Api – The HTTP Way
Web Api – The HTTP WayWeb Api – The HTTP Way
Web Api – The HTTP Way
 
Del furia signalr-to-the-max
Del furia   signalr-to-the-maxDel furia   signalr-to-the-max
Del furia signalr-to-the-max
 
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVM
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVMRealizzare applicazioni cross-platform con Xamarin e il pattern MVVM
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVM
 
Alla scoperta di gRPC
Alla scoperta di gRPCAlla scoperta di gRPC
Alla scoperta di gRPC
 

Similar to ASP.NET Core - dove siamo arrivati

Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010Fabrizio Bernabei
 
Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0Alessandro Forte
 
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1dotnetcode
 
Asp.Net MVC 2 :: VS 2010 Community Tour
Asp.Net MVC 2 :: VS 2010 Community TourAsp.Net MVC 2 :: VS 2010 Community Tour
Asp.Net MVC 2 :: VS 2010 Community TourAndrea Balducci
 
What's new in ASP.NET 4.0
What's new in ASP.NET 4.0What's new in ASP.NET 4.0
What's new in ASP.NET 4.0XeDotNet
 
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applicationsDotNetCampus
 
Designing with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDesigning with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDaniele Mondello
 
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the WebClaudio Gandelli
 
Asp.net web form 4.5 - what's new!!
Asp.net web form 4.5 - what's new!!Asp.net web form 4.5 - what's new!!
Asp.net web form 4.5 - what's new!!Massimo Bonanni
 
ASP.NET MVC 2.0
ASP.NET MVC 2.0ASP.NET MVC 2.0
ASP.NET MVC 2.0XeDotNet
 
Le novita di visual studio 2012
Le novita di visual studio 2012Le novita di visual studio 2012
Le novita di visual studio 2012Crismer La Pignola
 
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftAsp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftStefano Benedetti
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Whymca
 
SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDLuca Masini
 
Fe02 ria con breeze e knockout
Fe02   ria con breeze e knockoutFe02   ria con breeze e knockout
Fe02 ria con breeze e knockoutDotNetCampus
 
ASP.NET MVC 3: se non ora, quando?
ASP.NET MVC 3: se non ora, quando?ASP.NET MVC 3: se non ora, quando?
ASP.NET MVC 3: se non ora, quando?Giorgio Di Nardo
 
Introduzione ad angular 7/8
Introduzione ad angular 7/8Introduzione ad angular 7/8
Introduzione ad angular 7/8Valerio Radice
 
Integrazione con Visual Studio Online
Integrazione con Visual Studio OnlineIntegrazione con Visual Studio Online
Integrazione con Visual Studio OnlineDavide Benvegnù
 

Similar to ASP.NET Core - dove siamo arrivati (20)

Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
 
Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010
 
Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0
 
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
 
Asp.Net MVC 2 :: VS 2010 Community Tour
Asp.Net MVC 2 :: VS 2010 Community TourAsp.Net MVC 2 :: VS 2010 Community Tour
Asp.Net MVC 2 :: VS 2010 Community Tour
 
What's new in ASP.NET 4.0
What's new in ASP.NET 4.0What's new in ASP.NET 4.0
What's new in ASP.NET 4.0
 
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applications
 
Designing with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDesigning with microservices - Daniele Mondello
Designing with microservices - Daniele Mondello
 
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the Web
 
Asp.net web form 4.5 - what's new!!
Asp.net web form 4.5 - what's new!!Asp.net web form 4.5 - what's new!!
Asp.net web form 4.5 - what's new!!
 
ASP.NET MVC 2.0
ASP.NET MVC 2.0ASP.NET MVC 2.0
ASP.NET MVC 2.0
 
Le novita di visual studio 2012
Le novita di visual studio 2012Le novita di visual studio 2012
Le novita di visual studio 2012
 
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftAsp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini
 
SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROID
 
Fe02 ria con breeze e knockout
Fe02   ria con breeze e knockoutFe02   ria con breeze e knockout
Fe02 ria con breeze e knockout
 
ASP.NET MVC 3: se non ora, quando?
ASP.NET MVC 3: se non ora, quando?ASP.NET MVC 3: se non ora, quando?
ASP.NET MVC 3: se non ora, quando?
 
Introduzione ad angular 7/8
Introduzione ad angular 7/8Introduzione ad angular 7/8
Introduzione ad angular 7/8
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Integrazione con Visual Studio Online
Integrazione con Visual Studio OnlineIntegrazione con Visual Studio Online
Integrazione con Visual Studio Online
 

More from Andrea Dottor

Blazor ♥️ JavaScript
Blazor ♥️ JavaScriptBlazor ♥️ JavaScript
Blazor ♥️ JavaScriptAndrea Dottor
 
Blazor, lo sapevi che...
Blazor, lo sapevi che...Blazor, lo sapevi che...
Blazor, lo sapevi che...Andrea Dottor
 
Come sta la nostra applicazione? Un viaggio alla scoperta degli Health Check ...
Come sta la nostra applicazione? Un viaggio alla scoperta degli Health Check ...Come sta la nostra applicazione? Un viaggio alla scoperta degli Health Check ...
Come sta la nostra applicazione? Un viaggio alla scoperta degli Health Check ...Andrea Dottor
 
What's New in ASP.NET Core 3
What's New in ASP.NET Core 3What's New in ASP.NET Core 3
What's New in ASP.NET Core 3Andrea Dottor
 
Real case: migrate from Web Forms to ASP.NET Core gradually
Real case: migrate from Web Forms to ASP.NET Core graduallyReal case: migrate from Web Forms to ASP.NET Core gradually
Real case: migrate from Web Forms to ASP.NET Core graduallyAndrea Dottor
 
Dependency injection questa sconosciuta
Dependency injection questa sconosciutaDependency injection questa sconosciuta
Dependency injection questa sconosciutaAndrea Dottor
 
Customize ASP.NET Core scaffolding
Customize ASP.NET Core scaffoldingCustomize ASP.NET Core scaffolding
Customize ASP.NET Core scaffoldingAndrea Dottor
 
ASP.NET, ottimizziamo con la cache
ASP.NET, ottimizziamo con la cacheASP.NET, ottimizziamo con la cache
ASP.NET, ottimizziamo con la cacheAndrea Dottor
 
Creare API pubbliche, come evitare gli errori comuni
 Creare API pubbliche, come evitare gli errori comuni Creare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuniAndrea Dottor
 
Deploy & Run on Azure App Service
Deploy & Run on Azure App ServiceDeploy & Run on Azure App Service
Deploy & Run on Azure App ServiceAndrea Dottor
 
L'evoluzione del web
L'evoluzione del webL'evoluzione del web
L'evoluzione del webAndrea Dottor
 
Introduzione ad ASP.NET Core
Introduzione ad ASP.NET CoreIntroduzione ad ASP.NET Core
Introduzione ad ASP.NET CoreAndrea Dottor
 
Creare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuniCreare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuniAndrea Dottor
 
Crea servizi REST per la tua App con ASP.NET 5
Crea servizi REST per la tua App con ASP.NET 5Crea servizi REST per la tua App con ASP.NET 5
Crea servizi REST per la tua App con ASP.NET 5Andrea Dottor
 
Il buon programmatore - consigli pratici per una vita felice
Il buon programmatore - consigli pratici per una vita feliceIl buon programmatore - consigli pratici per una vita felice
Il buon programmatore - consigli pratici per una vita feliceAndrea Dottor
 
Migliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsMigliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsAndrea Dottor
 

More from Andrea Dottor (17)

Blazor ♥️ JavaScript
Blazor ♥️ JavaScriptBlazor ♥️ JavaScript
Blazor ♥️ JavaScript
 
Blazor, lo sapevi che...
Blazor, lo sapevi che...Blazor, lo sapevi che...
Blazor, lo sapevi che...
 
Come sta la nostra applicazione? Un viaggio alla scoperta degli Health Check ...
Come sta la nostra applicazione? Un viaggio alla scoperta degli Health Check ...Come sta la nostra applicazione? Un viaggio alla scoperta degli Health Check ...
Come sta la nostra applicazione? Un viaggio alla scoperta degli Health Check ...
 
What's New in ASP.NET Core 3
What's New in ASP.NET Core 3What's New in ASP.NET Core 3
What's New in ASP.NET Core 3
 
Real case: migrate from Web Forms to ASP.NET Core gradually
Real case: migrate from Web Forms to ASP.NET Core graduallyReal case: migrate from Web Forms to ASP.NET Core gradually
Real case: migrate from Web Forms to ASP.NET Core gradually
 
Dependency injection questa sconosciuta
Dependency injection questa sconosciutaDependency injection questa sconosciuta
Dependency injection questa sconosciuta
 
Customize ASP.NET Core scaffolding
Customize ASP.NET Core scaffoldingCustomize ASP.NET Core scaffolding
Customize ASP.NET Core scaffolding
 
ASP.NET, ottimizziamo con la cache
ASP.NET, ottimizziamo con la cacheASP.NET, ottimizziamo con la cache
ASP.NET, ottimizziamo con la cache
 
Creare API pubbliche, come evitare gli errori comuni
 Creare API pubbliche, come evitare gli errori comuni Creare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuni
 
Deploy & Run on Azure App Service
Deploy & Run on Azure App ServiceDeploy & Run on Azure App Service
Deploy & Run on Azure App Service
 
ASP.NET Core
ASP.NET CoreASP.NET Core
ASP.NET Core
 
L'evoluzione del web
L'evoluzione del webL'evoluzione del web
L'evoluzione del web
 
Introduzione ad ASP.NET Core
Introduzione ad ASP.NET CoreIntroduzione ad ASP.NET Core
Introduzione ad ASP.NET Core
 
Creare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuniCreare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuni
 
Crea servizi REST per la tua App con ASP.NET 5
Crea servizi REST per la tua App con ASP.NET 5Crea servizi REST per la tua App con ASP.NET 5
Crea servizi REST per la tua App con ASP.NET 5
 
Il buon programmatore - consigli pratici per una vita felice
Il buon programmatore - consigli pratici per una vita feliceIl buon programmatore - consigli pratici per una vita felice
Il buon programmatore - consigli pratici per una vita felice
 
Migliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsMigliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.js
 

ASP.NET Core - dove siamo arrivati

  • 1. saturday 2018 ASP.NET CORE DOVE SIAMO ARRIVATI Andrea Dottor @dottor
  • 2. Millions of developers have used (and continue to use) ASP.NET 4.x to create web apps. ASP.NET Core is a redesign of ASP.NET 4.x, with architectural changes that result in a leaner, more modular framework. ASP.NET Core provides the following benefits:  A unified story for building web UI and web APIs.  Architected for testability.  Razor Pages makes coding page-focused scenarios easier and more productive.  Ability to develope and run on Windows, macOS, and Linux.  Open-source and community-focused.  Integration of modern, client-side frameworks and development workflows.  A cloud-ready, environment-based configuration system.  Built-in dependency injection.  A lightweight, high-performance, and modular HTTP request pipeline.  Ability to host on IIS, Nginx, Apache, Docker, or self-host in your own process.  Side-by-side app versioning when targeting .NET Core.  Tooling that simplifies modern web development. WHY USE ASP.NET CORE? https://docs.microsoft.com/en-us/aspnet/core/?view=aspnetcore-2.1
  • 3. ASP.NET Core 2.x can target .NET Core or .NET Framework. ASP.NET Core apps targeting .NET Framework aren't cross-platform—they run on Windows only. Generally, ASP.NET Core 2.x is made up of .NET Standard libraries. Apps written with .NET Standard 2.0 run anywhere that .NET Standard 2.0 is supported. ASP.NET Core 2.x is supported on .NET Framework versions compatible with .NET Standard 2.0:  .NET Framework 4.7.1 and later is strongly recommended.  .NET Framework 4.6.1 and later. ASP.NET Core 3.0 and later will only run on .NET Core. ASP.NET CORE TARGETING .NET FRAMEWORK https://docs.microsoft.com/en-us/aspnet/core/?view=aspnetcore-2.1
  • 4. Cross-platform. Gira su macOS, Linux, e Windows. Migliori performance Possibilità di avere applicazioni Side-by-side che utilizzano versioni diverse del Framework Nuove API Open source VANTAGGI DI .NET CORE RISPETTO AL .NET FRAMEWORK
  • 6. Supporto "facilitato" a WCF  Ad oggi la configurazione va spostata nel codice Identity Server / Autenticazione OAuth  Ci si deve appoggiare a componenti di terze parti COSA MANCA
  • 9. Razor Pages is the recommended way to build UI for web apps in ASP.NET Core
  • 11. Nuovo middleware per forzare un redirect da HTTP a HTTPS  app.UseHttpsRedirection(); Se l'app è dietro ad un proxy che gestisce in automatico il redirect verso HTTPS, questo middleware non è necessario IIS10 gestisce in modo automatico il redirect verso HTTPS  <hsts enabled="true" max-age="31536000" redirectHttpToHttps="true" /> In versioni precedenti ad IIS10 è possibile installare il modulo HttpRedirect HTTPS
  • 12. Nuovo middleware per forzare un redirect da HTTP a HTTPS  app.UseHttpsRedirection(); Se l'app è dietro ad un proxy che gestisce in automatico il redirect verso HTTPS, questo middleware non è necessario IIS10 gestisce in modo automatico il redirect verso HTTPS  <hsts enabled="true" max-age="31536000" redirectHttpToHttps="true" /> In versioni precedenti ad IIS10 è possibile installare il modulo HttpRedirect HTTPS
  • 13. OWAST (Open Web Application Security Project) lavora agli standard HSTS per aumentare la sicurezza delle applicazioni web HSTS si basa sullo scambio dell'header 'Strict-Transport-Security' che informa il browser di utilizzare sempre connessioni https verso l'applicativo/dominio/path  Strict-Transport-Security: max-age=31536000; includeSubDomains; Esiste un middleware per abilitare questa funzionalità  app.UseHsts(); Da non utilizzare in sviluppo  Di default il browser mantiene l'informazione per 30 giorni (parametrizzabile) HTTP STRICT TRANSPORT SECURITY PROTOCOL (HSTS) https://www.owasp.org/index.php/HTTP_Strict_Transport_Security_Cheat_Sheet
  • 14. Non utilizzare RequireHttpsAttribute nei controller delle API Alcuni browser o applicazioni non gestiscono il redirect da HTTP a HTTPS  Chiudere la connessione e ritornare un 400 (Bad Request) Le API non dovrebbero essere in ascolto in HTTP ma solo in HTTPS REDIRECT HTTP VERSO HTTPS
  • 15. GDPR
  • 16. I progetti/template di default sono già predisposti per visualizzare la Cookie Privacy Policy.  Nel file startup.cs è possibile configurare il tutto.  Viene aggiunta una nuova partial contenente il testo da visualizzare nella barra  _CookieConsentPartial.cshtml  Pagina Pages/Privacy.cshtml con il testo della Privacy Policy Se l'utente non accetta il consenso, solo i cookie marcati come essenziali vengono inviati al client TempData funziona con i cookie, e se il tracking è disabilitato, questo non viene creato  Forzare in configurazione che il cookie del TempData è essenziale La sessione funziona solamente con tracking abilitato. GDPR - COOKIE POLICY
  • 18. Un utente autenticato può ora cancellare il proprio account o scaricare un file contenente le proprie informazioni personali. E' ora presente un attributo utile a decorare le proprietà dell'utente che contengono dati personali  PersonalDataAttribute Il download produce un json con le sole proprietà marcate con l'attributo PersonalData  Eventuali altre informazioni vanno gestite manualmente GDPR - PERSONAL DATA
  • 21. Con ASP.NET Core 2.1, ASP.NET Identity viene ora iniettata come Razor Class Library.  Il codice/view/pagine non sono presenti all'interno del progetto ma sono in un assembly separato.  Meno codice di default presente all'interno del progetto Viene data la possibilità di personalizzare le pagine esistenti utilizzando lo scaffolding, e quindi facendoci generare la pagina che vogliamo editare  Se una pagina è presente all'interno del progetto (nel path corretto), questa sostituisce quella di default. IDENTITY UI LIBRARY & SCAFFOLDING
  • 22. Identity viene esposto come un'area dal nome "Identity"  Gli url alle varie pagine cambia ASP.NET IDENTITY AREA
  • 23. IDENTITY UI LIBRARY & SCAFFOLDING
  • 24. API
  • 25. Attributo che viene valutato se abilitata la compatibilità con la versione 2.1  services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); Validazione automatica del model Se non rispetta la validazione, viene automaticamente ritornato uno status code 400 Bad Request al client Si evita di dover inserire sempre lo stesso codice in ogni action delle API Utilizzo degli RouteAttribute diventa una necessità "Actions are inaccessible via conventional routes defined in UseMvc or by UseMvcWithDefaultRoute in Startup.Configure." Inference rules per gli argomenti delle action Non è più obbligatorio specificare gil atributi FromBody, FromRoute, … per gli argomenti nel caso rispettino le convenzioni ANNOTATION API WITH APICONTROLLERATTRIBUTE
  • 26. Attributo che viene valutato se abilitata la compatibilità con la versione 2.1  services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); Validazione automatica del model  Se non rispetta la validazione, viene automaticamente ritornato uno status code 400 Bad Request al client  Si evita di dover inserire sempre lo stesso codice in ogni action delle API Utilizzo degli RouteAttribute diventa una necessità  "Actions are inaccessible via conventional routes defined in UseMvc or by UseMvcWithDefaultRoute in Startup.Configure." Inference rules per gli argomenti delle action  Non è più obbligatorio specificare gil atributi FromBody, FromRoute, … per gli argomenti nel caso rispettino le convenzioni ANNOTATION API WITH APICONTROLLERATTRIBUTE
  • 27. Se abilitata la compatibilità con la versione 2.1  services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); Validazione automatica del model  Se non rispetta la validazione, viene automaticamente ritornato uno status code 400 Bad Request al client  Si evita di dover inserire sempre lo stesso codice in ogni action delle API Utilizzo degli RouteAttribute diventa una necessità  "Actions are inaccessible via conventional routes defined in UseMvc or by UseMvcWithDefaultRoute in Startup.Configure." Inference rules per gli argomenti delle action  Non è più obbligatorio specificare gil atributi FromBody, FromRoute, … per gli argomenti nel caso rispettino le convenzioni APICONTROLLER
  • 28. Se abilitata la compatibilità con la versione 2.1  services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); Validazione automatica del model  Se non rispetta la validazione, viene automaticamente ritornato uno status code 400 Bad Request al client  Si evita di dover inserire sempre lo stesso codice in ogni action delle API Utilizzo degli RouteAttribute diventa una necessità  "Actions are inaccessible via conventional routes defined in UseMvc or by UseMvcWithDefaultRoute in Startup.Configure." Inference rules per gli argomenti delle action  Non è più obbligatorio specificare gil atributi FromBody, FromRoute, … per gli argomenti nel caso rispettino le convenzioni 15/09/2018 28 APICONTROLLER [FromBody] is inferred for complex type parameters. [FromForm] is inferred for action parameters of type IFormFile and IFormFileCollection. [FromRoute] is inferred for any action parameter name matching a parameter in the route template. [FromQuery] is inferred for any other action parameters.
  • 30. Il metapackage Microsoft.AspNetCore.All è considerato come deprecato, a favore di Microsoft.AspNetCore.App Microsoft.AspNetCore.App:  Rimosse librerie di terze-parti tranne Json.NET, Remotion.Linq e IX-Async.  Include tutti i packages di ASP.NET Core team  Include tutti I packages di Entity Framework Core team. We recommend migrating to the Microsoft.AspNetCore.App metapackage for 2.1 and later. To keep using the Microsoft.AspNetCore.All metapackage and ensure the latest patch version is deployed DEPRECATE MICROSOFT.ASPNETCORE.ALL
  • 31. Sono stati rimossi anche packages Microsoft ma che non sono mantentui dai team di ASP.NET e Entity Framework:  Microsoft.Data.Sqlite  Microsoft.Data.Sqlite.Core  Microsoft.EntityFrameworkCore.Sqlite  Microsoft.EntityFrameworkCore.Sqlite.Core  Microsoft.Extensions.Caching.Redis  Microsoft.AspNetCore.DataProtection.AzureStorage  Microsoft.Extensions.Configuration.AzureKeyVault  Microsoft.AspNetCore.DataProtection.AzureKeyVault  Microsoft.AspNetCore.Identity.Service.AzureKeyVault  Microsoft.AspNetCore.AzureKeyVault.HostingStartup  Microsoft.AspNetCore.ApplicationInsights.HostingStartup MICROSOFT.ASPNETCORE.APP
  • 32. Update the project file to use 2.1 versions  Change the target framework to .NET Core 2.1  Replace the package reference for Microsoft.AspNetCore.All with a package reference for Microsoft.AspNetCore.App  Remove references to <DotNetCliToolReference> elements for the following packages. These tools are bundled by default in the .NET Core CLI and don't need to be installed separately. ASP.NET Core 2.1 provides ASP.NET Core Identity as a Razor Class Library (RCL).  Identity 2.1 exposes endpoints with the Identity area MIGRATE FROM ASP.NET CORE 2.0 TO 2.1
  • 33.  ASP.NET Core Web Project template now updated to Bootstrap 4 that gives a fresh look to the page. Most of extra elements are removed. Default UI also supports Bootstrap 4.  For SPA based templates now support Angular 6  Parameter Transformers to routing  Link Generation  Validation Performance Improvements  API Controller Conventions  HTTP/2 support is added.  IIS in-process hosting model is added for IIS.  Health checks framework is integrated now to monitor health of APIs and apps.  Endpoint routing is introduced and takes care of several routing problems.  ASP.NET Core SignalR Java client is added. ASP.NET CORE 2.2 ROADMAP https://blogs.msdn.microsoft.com/webdev/2018/08/22/asp-net-core-2-2-0-preview1-now-available/ https://www.youtube.com/watch?v=DDBmvOPfqzA
  • 34. Some notable sub-components will be removed from the ASP.NET Core shared framework in 3.0  Json.NET (Newtonsoft.Json)  Entity Framework Core (Microsoft.EntityFrameworkCore.*) ASP.NET Core will only run on .NET Core starting from 3.0.  Microsoft.Extensions packages (such as logging, dependency injection, and config) will continue to support .NET Standard  Entity Framework Core will continue to support .NET Standard Delivering more value with focused 3rd party open-source integration  IdentityServer  Swashbuckle  NSwag  AutoRest […] ASP.NET CORE 3 ROADMAP https://blogs.msdn.microsoft.com/webdev/2018/10/29/a-first-look-at-changes-coming-in-asp-net-core-3-0/
  • 36. SignalR  Sessione di Emanuele Bartolesi Blazor  Sessione di Andrea Agnoletto Razor Pages  Sessione mia ☺ ALTRE NOVITÀ DI ASP.NET CORE: