0% ont trouvé ce document utile (0 vote)
23 vues37 pages

Cours ASP Routes

Transféré par

serge inack 3
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
23 vues37 pages

Cours ASP Routes

Transféré par

serge inack 3
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

ASP.

NET MVC : routage

Achref El Mouelhi

Docteur de l’université d’Aix-Marseille


Chercheur en programmation par contrainte (IA)
Ingénieur en génie logiciel

[Link]@[Link]

H & H: Research and Training 1 / 30


Plan

1 Routage par fichiers yml

2 Routage par décorateurs


[Route]
[RoutePrefix]

3 Verbes HTTP
[HttpGet]
[HttpPost]
[AcceptVerbs]

H & H: Research and Training 2 / 30


Routage par fichiers yml

[Link] MVC

Introduction
H I ©
EL
[Link] MVC génère un fichier de routage par défaut pour
U
chaque application créée O
f E LM
ch r e
On peut modifier la route par défaut

©A
On peut aussi définir une nouvelle

H & H: Research and Training 3 / 30


Routage par fichiers yml

[Link] MVC
Contenu du RouteConfig
[Link](
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "
H I ©
Index", id = [Link]}
UEL
O
LM
);

r e f E
ch
©A

H & H: Research and Training 4 / 30


Routage par fichiers yml

[Link] MVC
Contenu du RouteConfig
[Link](
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "
H I ©
Index", id = [Link]}
UEL
O
LM
);

r e f E
Si l’URL est composée de trois segments, le premier sera le nom
ch
©A
du contrôleur, le deuxième sera l’action et le dernier sera le
paramètre (donc, cette route autorise seulement un seul
paramètre
Des valeurs par défaut ont été précisées pour chaque segment si
une valeur pour ce dernier n’a pas été renseignée (Attention à
l’ordre des segments)
H & H: Research and Training 4 / 30
Routage par fichiers yml

[Link] MVC
Créons une nouvelle route
[Link](
name: "Second",
url: "second/{msg}/{nbr}",
defaults: new { controller = "Second", action = "
Index", msg = [Link], nbr=
H I ©
[Link]});
UEL
O
LM
[Link](
name: "Default",
r e f
url: "{controller}/{action}/{id}", E
ch
©A
defaults: new { controller = "Home", action = "Index"
, id = [Link]});

H & H: Research and Training 5 / 30


Routage par fichiers yml

[Link] MVC
Créons une nouvelle route
[Link](
name: "Second",
url: "second/{msg}/{nbr}",
defaults: new { controller = "Second", action = "
Index", msg = [Link], nbr=
H I ©
[Link]});
UEL
O
LM
[Link](
name: "Default",
r e f
url: "{controller}/{action}/{id}", E
ch
©A
defaults: new { controller = "Home", action = "Index"
, id = [Link]});

Tandis que la route Default renvoie vers plusieurs contrôleurs, la route


Second dirige vers un seul contrôleur (qui est SecondControleur). Elle
prend au plus deux paramètres. Le deuxième est de type numérique.

H & H: Research and Training 5 / 30


Routage par fichiers yml

[Link] MVC

Supposons que le contenu du SecondController est le suivant :


public class SecondController : Controller
{
// GET: Second
H I ©
EL
public String Index(string msg, int nbr)
{
O U
string result = " ";
f E LM
{ ch r e
for(int i = 0; i< nbr; i++)

}
©A
result += msg + " ";

return result;
}
}

H & H: Research and Training 6 / 30


Routage par fichiers yml

[Link] MVC

Exemple
/second/wick/3 affiche wick wick wick
/second?msg=wick&nbr=3 affiche wick wick wick
H I ©
EL
OU
/second/3/wick génère une erreur
M
E L affiche wick wick wick
/second?nbr=3&msg=wick
f
chr e
© A
Attention à l’ordre des routes
Si on inverse les deux routes Default et Second, la route
/second/wick/3 déclenchera une erreur aussi.

H & H: Research and Training 7 / 30


Routage par fichiers yml

[Link] MVC
On peut définir des contraintes sur les paramètres de nos routes

nbr = @"\d+" : pour indiquer que nbr est de type numérique (\d :
entier, + : au moins un)

H I ©
si l’url est /second/wick/john, alors une erreur 404 sera affichée.

UEL
O
Le compilateur commence par chercher la route dont le contrôleur est

E LM
second et dont le deuxième paramètre est de type entier.
f
r e
h avec la route "second/{msg}/{nbr}", il
croute
Pas de correspondance
©
passe donc A
à la suivante dans RouteConfig.

Il ne trouve aucune correspondance, il retourne donc une erreur 404.

Pour utiliser les expressions régulières dans la plateforme .NET, il faut utiliser
le namespace [Link]

H & H: Research and Training 8 / 30


Routage par fichiers yml

[Link] MVC

Dans ce cas, il faut ajouter une section constraints


[Link](
H I ©
name: "Default",
UEL
url: "{controller}/{action}/{id}", O
E
defaults: new { controller = "Home", action = "
f LM
Index"},
ch r e
©A
constraints: new { id = @"\d+"}
);

H & H: Research and Training 9 / 30


Routage par fichiers yml

[Link] MVC
Autres contraintes (exprimées avec les expressions régulières)
nbr = @"\d{4}" : pour indiquer que nbr doit contenir 4
chiffres
* : 0 ou plusieurs fois
H I ©
EL
? : 0 ou 1 fois
ˆ : commence par O U
$ : se termine par f E LM
. : n’importeA
r e
chcaractère
quel
©
() : le groupe
{n,m} : minimum n fois, maximum m fois
{n} : n fois exactement
{n,} : minimum n fois
H & H: Research and Training 10 / 30
Routage par fichiers yml

[Link] MVC

Autres contraintes (exprimées avec les expressions régulières)

\d : un chiffre
\D : tout sauf un chiffre
H I ©
EL
\w : un caractère alphanumérique
M OU
\W : tout sauf un caractE èreL
r e f alphanumérique

A
\t : un caract chde tabulation
ère
©
\n : un caractère de retour à la ligne
...

H & H: Research and Training 11 / 30


Routage par fichiers yml

[Link] MVC

Autres contraintes (exprimées avec les expressions régulières)


[a-z] : toutes les lettres entre a et z
[abcd] : a, b, c, ou d
H I ©
UEL
MO
[A-Za-z] : une lettre en majuscule et une en minuscule
[ˆa-d] : tout sauf a, b, E
f L
c, et d
c h r e
©A
...

Pour utiliser un caractère réservé (ˆ, $...) dans une expression


régulière, il faut le précéder par \

H & H: Research and Training 12 / 30


Routage par fichiers yml

[Link] MVC

Pour indiquer que le nombre de paramètre est indéterminé, il faut


ajouter *
[Link](
name: "Default",
H I ©
url: "{controller}/{action}/{*id}",
UEL
O
LM
defaults: new { controller = "Home", action = "

r e f E
Index", id = [Link]}
);
ch
©A

H & H: Research and Training 13 / 30


Routage par fichiers yml

[Link] MVC

Pour indiquer que le nombre de paramètre est indéterminé, il faut


ajouter *
[Link](
name: "Default",
H I ©
url: "{controller}/{action}/{*id}",
UEL
O
LM
defaults: new { controller = "Home", action = "

r e f E
Index", id = [Link]}
);
ch
©A
Dans le contrôleur, il faut récupérer une chaı̂ne de caractère nommée
id contenant la suite de paramètres séparés par /

H & H: Research and Training 13 / 30


Routage par fichiers yml

[Link] MVC

Exercice

H I ©
Écrire une action d’un contrôleur [Link] qui
UEL
O
f E LM
récupère un nombre variable de paramètres de type entier
calcule la somme
ch r e
©A
envoie le résultat à la vue pour affichage

H & H: Research and Training 14 / 30


Routage par décorateurs

[Link] MVC

Pour utiliser les décorateurs, il faut H I ©


UEL
O
mettre en commentaire les routes définies dans RouteConfig

f E LM
ch r e
activer le routage par décorateur

©A

H & H: Research and Training 15 / 30


Routage par décorateurs

[Link] MVC

Nouveau contenu de RouteConfig


public class RouteConfig
{
public static void RegisterRoutes(
H I ©
RouteCollection routes)
UEL
{ O
E
[Link]("{resource}.axd/{*
f LM
pathInfo}");
ch r e
©A
// activer le routage par décorateur
[Link]();
}
}

H & H: Research and Training 16 / 30


Routage par décorateurs [Route]

[Link] MVC

Pour définir une route home/index


public HomeController : Controller
H I ©
EL
{
[Route("home/index")]
O U
public ActionResult Index()
f E LM
{
return View(); ch r e
}
} ©A

H & H: Research and Training 17 / 30


Routage par décorateurs [Route]

[Link] MVC

[Route] vs [ActionName] H I ©
UEL
O
[ActionName] fonctionne avec le routage par fichiers yml.

f E LM
[Route] fonctionne avec le routage par décorateurs.
ch r e
©A

H & H: Research and Training 18 / 30


Routage par décorateurs [Route]

[Link] MVC
Pour définir une route avec paramètre home/index/{id}
public HomeController : Controller
{
[Route("home/index/{id}")]
public ActionResult Index(string id)
H I ©
{
UEL
O
LM
[Link] = id;
return View();
r e f E
}
ch
}
©A
Dans la vue
@[Link]

Ne pas recevoir une valeur pour ce paramètre déclenche une


exception
H & H: Research and Training 19 / 30
Routage par décorateurs [Route]

[Link] MVC

Pour éviter l’exception


public HomeController : Controller
{
H I ©
[Route("home/index/{id?}")]
UEL
O
LM
public ActionResult Index(string id)
{
r e f E
[Link] = id;
ch
} ©A
return View();

H & H: Research and Training 20 / 30


Routage par décorateurs [Route]

[Link] MVC

Pour un paramètre de type entier


public HomeController : Controller
{
H I ©
[Route("home/index/{id:int}")]
UEL
O
LM
public ActionResult Index(int id)
{
r e f E
[Link] = id;
ch
} ©A
return View();

H & H: Research and Training 21 / 30


Routage par décorateurs [RoutePrefix]

[Link] MVC

Pour définir un préfixe pour toutes les routes d’un contrôleur


[RoutePrefix("home")]
public HomeController : Controller
{
H I ©
EL
[Route("index/{id:int}")]
public ActionResult Index(int id)
O U
{
f E LM
[Link] = id;
return View(); ch r e
}
} ©A

H & H: Research and Training 22 / 30


Routage par décorateurs [RoutePrefix]

[Link] MVC

Pour définir un préfixe pour toutes les routes d’un contrôleur


[RoutePrefix("home")]
public HomeController : Controller
{
H I ©
EL
[Route("index/{id:int}")]
public ActionResult Index(int id)
O U
{
f E LM
[Link] = id;
return View(); ch r e
}
} ©A

En saisissant home/index/3 dans la barre d’adresse, la méthode


Index de HomeController sera exécutée
H & H: Research and Training 22 / 30
Routage par décorateurs [RoutePrefix]

[Link] MVC
Pour détacher le préfixe de la route d’une méthode
[RoutePrefix("home")]
public HomeController : Controller
{
[Route("˜index/{id:int}")]
H I ©
public ActionResult Index(int id)
U EL
O
LM
{
[Link] = id;
r e f E
return View();
ch
}
}
©A

H & H: Research and Training 23 / 30


Routage par décorateurs [RoutePrefix]

[Link] MVC
Pour détacher le préfixe de la route d’une méthode
[RoutePrefix("home")]
public HomeController : Controller
{
[Route("˜index/{id:int}")]
H I ©
public ActionResult Index(int id)
U EL
O
LM
{
[Link] = id;
r e f E
return View();
ch
}
}
©A

En saisissant home/index/3 dans la barre d’adresse, on aura


une erreur. La route index/3 permet d’exécuter la méthode
Index de HomeController.
H & H: Research and Training 23 / 30
Routage par décorateurs [RoutePrefix]

[Link] MVC
Pour définir une valeur min pour le paramètre id
[RoutePrefix("home")]
public HomeController : Controller
{
[Route("˜index/{id:int:min{5}}")]
H I ©
public ActionResult Index(int id)
U EL
O
LM
{
[Link] = id;
r e f E
return View();
ch
}
}
©A

H & H: Research and Training 24 / 30


Routage par décorateurs [RoutePrefix]

[Link] MVC
Pour définir une valeur min pour le paramètre id
[RoutePrefix("home")]
public HomeController : Controller
{
[Route("˜index/{id:int:min{5}}")]
H I ©
public ActionResult Index(int id)
U EL
O
LM
{
[Link] = id;
r e f E
return View();
ch
}
}
©A

En saisissant index/3 dans la barre d’adresse, on aura une


erreur. La route index/6 permet d’exécuter la méthode Index de
HomeController.
H & H: Research and Training 24 / 30
Routage par décorateurs [RoutePrefix]

[Link] MVC

On peut aussi utiliser les fonctions


max
H I ©
U EL
minlength et maxlength
O
range
f E LM
ch r e
©A
regex
...

H & H: Research and Training 25 / 30


Routage par décorateurs [RoutePrefix]

[Link] MVC
Exemple avec les expressions régulières
[RoutePrefix("home")]
public HomeController : Controller
{
H I ©
EL
[Route("˜/index/{id:regex(ˆ0.*9$)}")]
public ActionResult Index(int id)
O U
{
f E LM
[Link] = id;
return View(); ch r e
}
} ©A

H & H: Research and Training 26 / 30


Routage par décorateurs [RoutePrefix]

[Link] MVC
Exemple avec les expressions régulières
[RoutePrefix("home")]
public HomeController : Controller
{
H I ©
EL
[Route("˜/index/{id:regex(ˆ0.*9$)}")]
public ActionResult Index(int id)
O U
{
f E LM
[Link] = id;
return View(); ch r e
}
} ©A

Ainsi on impose une valeur pour le paramètre id qui commence


par 0 et qui se termine par 9.
H & H: Research and Training 26 / 30
Verbes HTTP

[Link] MVC

Rappel
H I ©
UEL
Par défaut, les actions d’un contrôleur sont accessibles par le
O
biais du verbe GET.
f E LM
ch r e
Cependant, il existe un décorateur pour chaque verbe HTTP.
©A

H & H: Research and Training 27 / 30


Verbes HTTP [HttpGet]

[Link] MVC

Pour indiquer explicitement le verbe HTTP GET, on utilise


[HttpGet]
public HomeController : Controller
H I ©
{
U EL
[HttpGet]
O
[Route("home/index")]
f E LM
public ActionResult Index()
ch r e
©A
{
return View();
}
}

H & H: Research and Training 28 / 30


Verbes HTTP [HttpPost]

[Link] MVC

Une action peut aussi être accessible par le biais de plusieurs


verbes HTTP
public HomeController : Controller
{ H I ©
[HttpPost]
U EL
O
[HttpGet]
[Route("home/index")]
f E LM
ch
public ActionResult Index() r e
{
©A
return View();
}
}

H & H: Research and Training 29 / 30


Verbes HTTP [AcceptVerbs]

[Link] MVC

On peut aussi fusionner les décorateurs précédents


public HomeController : Controller
{
H I ©
[AcceptVerbs([Link] | [Link])]
U EL
O
LM
[Route("home/index")]
public ActionResult Index()
r e f E
{
ch
} ©A
return View();

H & H: Research and Training 30 / 30

Vous aimerez peut-être aussi