Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Route constraints

Introdurre vincoli per verificare la validità degli URL
Introdurre vincoli per verificare la validità degli URL
Link copiato negli appunti

In questa lezione vediamo come poter meglio controllare i parametri che compongono l'URL, inserendo dei vincoli. Prendiamo per esempio la seguente regola, vista nella lezione precedente:

{controller}/{action}/{id}

La regola è verificata per URL come i seguenti:

gallery/show/5
gallery/show/134
...

Le azioni dei controller cui questa regola è associata, ad esempio Detail, si aspettano di ricevere un valore di tipo Integer per il parametro {id}:

public ActionResult Detail(int id) { }

ASP.NET, tuttavia, non esegue alcun controllo automatico sul valore dei parametri ed utilizza soltanto la struttura degli URL per verificare le regole di routing. La regola precedente è verificata quindi anche per URL che contengono un parametro {id} di tipo non numerico:

gallery/show/blabla gallery/show/testoAcaso

Richiamare uno degli URL precedenti nella nostra galleria di immagini genererà una eccezione, poichè ASP.NET cercherà di richiamare l'azione corrispondente (come Detail, che necessita di un ID numerico) passandogli un valore di tipo String.

Per ovviare a questi problemi il meccanismo di routing ci mette a disposizione i Route Constraints con cui è possibile dichiarare dei vincoli a cui i parametri devono sottostare per essere considerati validi. È possibile dichiarare i constraints direttamente nella chiamata alla funzione MapRoute:

routes.MapRoute( "Gallery",
                 "{controller}/{action}/{id}",
                 new { controller = "Gallery", action = "Index", id = "" },
                 new { id = @"d+" }
               );

Abbiamo già incontrato i primi tre parametri della funzione nella lezione precedente; il nuovo parametro definisce un route constraint sul parametro {id} attraverso l'uso di espressioni regolari. Perchè l'URL sia considerato valido, quindi, {id} dovrà essere formato da una o più cifre numeriche.

ASP.NET permette anche di definire nuovi route constraints, utili per esigenze specifiche. La creazione di vincoli personalizzati esula tuttavia dagli scopi di questa guida.

Ti consigliamo anche