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
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
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
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/