ASP.NET Core MVC: caratteristiche principali.

ASP.NET Core MVC è un Framework* open source ottimizzato per essere utilizzato con ASP.NET Core.

ASP.NET Core MVC fornisce un metodo di sviluppo basato sulla separazione degli ambiti per implementare applicazioni orientate al web. Questo framework conferisce un controllo completo sul markup, supporta il TDD-Friendly (Test Driven Development ovvero Sviluppo Guidato dai test) e utilizza gli standard web più aggiornati.

Caratteristiche principali.

Le caratteristiche principali di ASP:NET Core MVC sono:

Routing.

ASP.NET Core MVC si basa sul routing di ASP.NET Core, un modulo che distribuisce e associa le richieste in ingresso ad azioni specifiche del Controller.

Il routing è quel meccanismo che associa un URL a una determinata azione. Tali associazioni, di cui possiamo ridefinire le regole, sono convenzionali e legate ai nomi delle azioni.

Una Route può estrapolare i valori contenuti nella URL della richiesta e utilizzarli nel processo di elaborazione della richiesta stessa.

Il routing permette di implementare applicazioni caratterizzate da URL comprensibili e ottimizzati sia per i motori di ricerca in ambito SEO, sia nella generazione di link verso risorse di cui è possibile ignorarne l’aspetto organizzativo all’interno del server.

È possibile definire il modello sintattico di route più adatto a supportare i così detti Vincoli di Route (Route Constraints). A questi vincoli i parametri devono sottostare per essere considerati validi.

Routing basato sulle convenzioni

Il routing basato sulle convenzioni permette di definire globalmente i formati di URL accettati dall’applicazione e le modalità attraverso cui le richieste vengono direzionate a un’azione specifica. Quando una richiesta in entrata viene ricevuta, il motore di routing analizza l’URL e lo abbina a uno dei formati di URL definiti affinché venga eseguita l’azione.

routes.MapRoute(name:"Default",template:"{controller=Home}/{action=index}/{id?}");

Routing basato sugli attributi.

Con il routing basato sugli attributi, controller e azioni sono in grado di definire le proprie routes.

[Route("api/[controller]")]
public class ProducttiController : Controller
{
    [HttpGet("{id}")]
    public IActionResult GetProdotto(int id)
    {
        ...
    }
}

Associazione di Modelli – Model Binding.

Il Model binding è un meccanismo che permette di evitare la “duplicazione” del codice nell’ambito di applicazioni diverse. Esso si occupa di convertire i dati provenienti dalla richiesta di un client in oggetti gestibili dal controller. Per dati provenienti da un client si intendono, ad esempio, quelli provenienti da un form, da una query string o le intestazioni http. Il risultato è che il controller non dovrà impegnarsi per comprendere le informazioni incluse nelle richieste in arrivo: queste, infatti, sono immediatamente nelle sue disponibilità sotto forma di parametri che le azioni possono utilizzare direttamente.

Attraverso il meccanismo di astrazione dell’associazione, il Model Binding esegue la mappatura dei dati provenienti dalle richieste http per passarli, come parametri, al metodo che si occupa di elaborare l’azione. I parametri potrebbero essere tipi semplici, come stringhe e numeri interi, o tipi complessi.

Esempio: https://www.marcotomassini.it/Utenti?id=1&nome=Marco

public ActionResult Modifica(int id, string nome)
{
    //Fai qualcosa...
    return View();
}

Convalida del modello – Model Validation.

La convalida dei dati verifica la validità delle informazioni inserite dall’utente rispetto alla logica dell’applicazione.

Prima che un’applicazione possa procedere all’archiviazione dei dati, questi devono essere convalidati affinché non rappresentino una minaccia alla sicurezza del sistema. Inoltre, deve essere verificata la giusta formattazione delle informazioni ovvero rispettare la giusta grandezza, l’esattezza del tipo di dato e la conformità alle regole.

la convalida è, in definitiva, un’operazione necessaria che si svolge sia lato client che lato server.

Dal momento che l’implementazione di un sistema di convalida è spesso un’operazione piuttosto tediosa, .NET ne ha fatto un’astrazione negli attributi di convalida: questi, in concreto, contengono il codice necessario alla validazione.

ASP.NET Core MVC convalida le informazioni introducendo, nel modello dell’oggetto, gli attributi di convalida dell’annotazione dei dati.

Esempio di modello:

using System.ComponentModel.DataAnnotations;
public class AutenticazioneViewModel
{
    [Required]
    [EmailAddress]
    public string Email { get; set; }

    [Required]
    [DataType(DataType.Password)]
    public string Password { get; set; }

    [Display(Name = "Nome utente o password dimenticata?")]
    public bool PswUsrDimenticati { get; set; }
}

Esempio di azione eseguita dal controller:

public async Task<IActionResult> Autenticazione(AutenticazioneViewModel model, string urlRestituito = null)
{
    if(ModelState.IsValid)
    {
        //lavora con il modello
    }

    //L'operazione di convalida non ha avuto successo
    return View(model);
}

Il framework gestisce la convalida dei dati provenienti dalle richieste sia in ambito client che in ambito server. La logica specificata sui modelli viene aggiunta alle viste renderizzate e applicata dal browser utilizzando JQuery Validation.

Iniezione di dipendenze – Dependency injection.

ASP.NET Core supporta il meccanismo di iniezione di dipendenze. Questa caratteristica permette di operare secondo il principio delle dipendenze esplicite.

A fondamento di questa proprietà del framework vi è la necessità di avere un componente esterno che sia in grado di creare gli oggetti e le loro relative dipendenze per assemblarle, infine, attraverso un’operazione di integrazione (injection).

Esistono tre forme di injection:

  • Constructor injection, in cui la dipendenza viene iniettata utilizzando l’argomento del costruttore;
  • Setter injection, in cui la dipendenza viene iniettata utilizzando un metodo set;
  • Interface injection, basata sul mapping tra intefaccia e la sua implementazione.

Direttiva @inject.

L’applicazione può integrare le dipendenze nei file di visualizzazione utilizzando la direttiva @inject.

@inject ServizioTest NomeSrvizio
<!DOCTYPE html>
<html lang="it-it">
<head>
    <title>@NomeServizio.GetTitolo</title>
</head>
<body>
    <h1>@NomeSrvizio.GetTitolo</h1>
</body>
</html>

Filtri

I filtri consentono agli sviluppatori di gestire interessi trasversali, come la gestione delle eccezioni o le autorizzazioni a specifiche risorse. Il meccanismo dei filtri consente di utilizzare logiche personalizzate da applicare in vari contesti e situazioni come, ad esempio, prima e dopo l’elaborazione dei metodi o nelle fasi di elaborazione di una richiesta nell’ambito della pipeline.

I filtri possono essere applicati nelle azioni sotto forma di attributi o essere eseguiti a livello globale.

Il framework include una varietà di filtri. Ad esempio, Authorize viene usato per creare filtri di autorizzazione che impediscono all’utente di accedere a specifiche risorse. Altri, ancora, assicurano che tutte le richieste utilizzino https o agiscono bloccando la pipeline delle richieste per restituire i dati memorizzati nella cache.

using System.Web.Mvc;
namespace MiaApp.Test
{
    [Authorize]
    public class AccountController : Controller
    { }
}

Aree

In ASP.NET Core MVC, la suddivisione di un’applicazione di grandi dimensioni in aree permette di creare gruppi funzionali dalle dimensioni ridotte, rendendola più facilmente manutenibile.

In un progetto MVC, i componenti logici Model, View e Controller si trovano in cartelle differenti per cui, la correlazione tra i vari componenti viene stabilita attraverso la convenzione dei nomi.

Web APIs.

ASP.NET Core MVC è un eccezionale supporto per lo sviluppo di web API, servizi in grado di raggiungere un’ampia platea di client e dispositivi mobili.

Il framework include il supporto per la negoziazione del contenuto HTTP che avviene quando una richiesta contiene un’intestazione di accettazione (Accept). La formattazione dei dati viene garantita attraverso l’integrazione di supporti come JSON o XML.

È infine possibile abilitare il supporto per il cross-origin resource sharing (CORS), per condividere le proprie Web API tra più applicazioni.

Testabilità.

L’integrazione dei test viene facilitata da specifiche caratteristiche incluse nel framework come TestHost e il provider InMemory per Entity Framework.

Motore di visualizzazione Razor.

ASP.NET Core MVC utilizza il motore di visualizzazione Razor per effettuare il rendering delle viste.

Razor è un linguaggio TML (Template Markup Language) che, incorporando codice C#, definisce le visualizzazioni dinamicamente sul server.

<ul>
    @for(int i = 0; i < 5; i++)
    {
        <li>Elemento @i della lista</li>
    }
</ul>

Visualizzazioni fortemente tipizzate.

Le visualizzazioni sviluppate con Razor possono basarsi sul proprio modello ed essere, di conseguenza, fortemente tipizzate. Questo permette alla vista di ricevere tipi verificati e il supporto IntelliSense.

@model IEnumerable<Prodotti>
<ul>
    @foreach (Prodotti prodotto in Model)
    {
        <li>@prodotto.Nome</li>
    }
</ul>

Tag Helpers.

I tag helpers permettono la partecipazione del codice lato server ai processi di elaborazione degli elementi HTML presenti nei file Razor.

Attraverso questo meccanismo si possono personalizzare i tag (<environment>) o modificare il comportamento di quelli esistenti (<label>). L’associazione tra tag helpers ed elementi specifici avviene attraverso il nome dell’elemento e i suoi attributi.

Per le attività più comuni esistono molti tag helpers predefiniti come, ad esempio, per la creazione di link e moduli.

<environment names="Development">
    <strong>Visualizzato se l'ambiente di runtime è quello di sviluppo</strong>
</environment>

Componenti di visualizzazione.

I componenti di visualizzazione presentano aspetti simili alle visualizzazioni parziali. In genere questi elementi vengono richiamati da una pagina di layout e non sono associati a modelli, ma piuttosto dipendono dai dati specificati in fase di chiamata. In sintesi, consentono la creazione di pacchetti di logica di rendering che possono essere riutilizzati nel contesto dell’applicazione.


  1. *
    Framework: architettura logica di supporto su cui un software può essere progettato e realizzato.
  2. Le annotazioni dei dati ci consentono di descrivere le regole che vogliamo applicare alle proprietà presenti nel modello dell’oggetto. ASP.NET MVC si occuperà di applicarle.
  3. CORS: condivisione di risorse tra le origini.

Articoli recenti

Related Stories

LASCIA UN COMMENTO

Per favore inserisci il tuo commento!
Per favore inserisci il tuo nome qui

*