Anteprima di ASP.NET Core 2.1 - Parte 2

di Moreno Gentili, in ASP.NET Core,

Nell'articolo precedente abbiamo iniziato a esplorare le novità che ci attendono con ASP.NET Core 2.1. In particolare, ci siamo concentrati inizialmente sugli step necessari per aggiornare il nostro ambiente di sviluppo e su alcune novità relative a sicurezza e privacy.

In questa seconda e ultima parte, invece, focalizzeremo la nostra attenzione su quanto ci aspetta nell'ambito più strettamente tecnologico, come novità sulle Razor Pages e SignalR.

Miglioramenti alle Razor Page

Già da ASP.NET Core 2.0 è stato introdotto il supporto alle Razor Page, che offrono un modo alternativo al pattern MVC per realizzare pagine web. Alla Razor Page è associato un file di codice che ne regola il funzionamento.

Ora, con ASP.NET Core 2.1, le Razor Page possono essere organizzate in aree. Un'area è un raggruppamento logico di pagine, di modelli e di layout che per questioni strutturali vogliamo tenere separate dal resto. La UI di ASP.NET Core Identity, ad esempio, è inserita in una propria area Identity.

Possiamo predisporre un'area creando una directory /Areas/NomeArea/Pages e organizzare le Razor Page al suo interno come preferiamo. I contenuti condivisi, come i layout e le partial, vanno inseriti all'interno di /Areas/NomeArea/Pages/Shared.

Figura 1

È perfettamente normale creare un'applicazione ASP.NET Core in cui siano presenti sia Controller MVC che Razor Page, secondo le nostre esigenze. Per creare un link ad una Razor Page situata in un'area, usiamo il tag helper Anchor, come nell'esempio seguente:

<a asp-area="Admin" asp-page="/Dashboard/Index">Vai all'area Admin</a>

Razor Page filter

Tra gli altri miglioramenti alle Razor Page, abbiamo la possibilità di configurare dei page filter che ci consentono di aggiungere della logica trasversale, come logging e caching, ogni volta che una pagina viene eseguita.

Per prima cosa, creiamo un nostro attributo che implementi l'interfaccia IPageFilter oppure IAsyncPageFilter, come la seguente:

[AttributeUsage(AttributeTargets.Class)]
public class LogFilter : Attribute, IPageFilter
{
  public void OnPageHandlerSelected(PageHandlerSelectedContext context)
  {
    //La Razor Page è stata selezionata dal motore di routing
  }
  
  public void OnPageHandlerExecuting(PageHandlerExecutingContext context)
  {
    //La Razor Page sta per essere eseguita
  }
  
  public void OnPageHandlerExecuted(PageHandlerExecutedContext context)
  {
    //La Razor Page è stata appena eseguita
  }
}

Poi, aggiungiamo il filtro alla Razor Page decorando la sua classe model con l'attributo che abbiamo appena creato.

[LogFilter]
public class DashboardModel : PageModel
{
  //...
}

Per impostare un filtro a livello globale, che andrà in esecuzione per ogni Razor Page dell'applicazione, agiamo invece nel metodo ConfigureServices della classe Startup.

services.AddMvc(options => {
  options.Filters.Add(new LogFilter());
});
3 pagine in totale: 1 2 3
Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Top Ten Articoli

Articoli via e-mail

Iscriviti alla nostra newsletter nuoviarticoli per ricevere via e-mail le notifiche!

In primo piano

I più letti di oggi

In evidenza

Misc