31
ASP.NET MVC : routage Achref El Mouelhi Docteur de l’universit ´ e d’Aix-Marseille Chercheur en programmation par contrainte (IA) Ing ´ enieur en g ´ enie logiciel [email protected] H & H: Research and Training 1 / 24

ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

  • Upload
    others

  • View
    35

  • Download
    7

Embed Size (px)

Citation preview

Page 1: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

ASP.NET MVC : routage

Achref El Mouelhi

Docteur de l’universite d’Aix-MarseilleChercheur en programmation par contrainte (IA)

Ingenieur en genie logiciel

[email protected]

H & H: Research and Training 1 / 24

Page 2: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Plan

1 Le routage avec les fichier yml

2 Le routage avec les decorateurs

H & H: Research and Training 2 / 24

Page 3: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les fichier yml

Les routes

Introduction

ASP.NET MVC genere un fichier de routage par defaut pourchaque application creee

On peut modifier la route par defaut

On peut aussi definir une nouvelle

H & H: Research and Training 3 / 24

Page 4: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les fichier yml

Les routes

Contenu du RouteConfig

routes.MapRoute(name: "Default",url: "{controller}/{action}/{id}",defaults: new { controller = "Home", action = "

Index", id = UrlParameter.Optional});

Si l’URL est composee de trois segments, le premier sera le nomdu controleur, le deuxieme sera l’action et le dernier sera leparametre (donc, cette route autorise seulement un seulparametre

Des valeurs par defaut ont ete precisees pour chaque segment siune valeur pour ce dernier n’a pas ete renseignee (Attention al’ordre des segments)

H & H: Research and Training 4 / 24

Page 5: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les fichier yml

Les routes

Contenu du RouteConfig

routes.MapRoute(name: "Default",url: "{controller}/{action}/{id}",defaults: new { controller = "Home", action = "

Index", id = UrlParameter.Optional});

Si l’URL est composee de trois segments, le premier sera le nomdu controleur, le deuxieme sera l’action et le dernier sera leparametre (donc, cette route autorise seulement un seulparametre

Des valeurs par defaut ont ete precisees pour chaque segment siune valeur pour ce dernier n’a pas ete renseignee (Attention al’ordre des segments)

H & H: Research and Training 4 / 24

Page 6: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les fichier yml

Les routesCreons une nouvelle route

routes.MapRoute(name: "Second",url: "second/{msg}/{nbr}",defaults: new { controller = "Second", action =

"Index", msg = UrlParameter.Optional, nbr=UrlParameter.Optional});

routes.MapRoute(name: "Default",url: "{controller}/{action}/{id}",defaults: new { controller = "Home", action = "

Index", id = UrlParameter.Optional});

Tandis que la route Default renvoie vers plusieurs controleurs, laroute Second dirige vers un seul controleur (qui estSecondControleur. Elle prend au plus deux parametres. Ledeuxieme est de type numerique.

H & H: Research and Training 5 / 24

Page 7: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les fichier yml

Les routesCreons une nouvelle route

routes.MapRoute(name: "Second",url: "second/{msg}/{nbr}",defaults: new { controller = "Second", action =

"Index", msg = UrlParameter.Optional, nbr=UrlParameter.Optional});

routes.MapRoute(name: "Default",url: "{controller}/{action}/{id}",defaults: new { controller = "Home", action = "

Index", id = UrlParameter.Optional});

Tandis que la route Default renvoie vers plusieurs controleurs, laroute Second dirige vers un seul controleur (qui estSecondControleur. Elle prend au plus deux parametres. Ledeuxieme est de type numerique.

H & H: Research and Training 5 / 24

Page 8: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les fichier yml

Les routes

Supposons que le contenu du SecondController est le suivant :

public class SecondController : Controller{

// GET: Secondpublic String Index(string msg, int nbr){

string result = " ";for(int i = 0; i< nbr; i++){

result += msg + " ";}return result;

}}

H & H: Research and Training 6 / 24

Page 9: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les fichier yml

Les routes

Exemple

/second/wick/3 affiche wick wick wick

/second?msg=wick&nbr=3 affiche wick wick wick

/second/3/wick genere une erreur

/second?nbr=3&msg=wick affiche wick wick wick

Attention a l’ordre des routesSi on inverse les deux routes Default et Second, la route/second/wick/3 declenchera une erreur aussi.

H & H: Research and Training 7 / 24

Page 10: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les fichier yml

Les routesOn peut definir des contraintes sur les parametres de nos routes

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

si l’url est /second/wick/john, alors une erreur 404 seraaffichee.

Le compilateur commence par chercher la route dont le controleurest second et dont le deuxieme parametre est de type entier.

Pas de correspondance avec la route "second/{msg}/{nbr}",il passe donc a la route suivante dans RouteConfig.

Il ne trouve aucune correspondance, il retourne donc une erreur404.

Pour utiliser les expressions regulieres dans la plateforme .NET, il faututiliser le namespace System.Text.RegularExpressions

H & H: Research and Training 8 / 24

Page 11: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les fichier yml

Les routes

Dans ce cas, il faut ajouter une section constraints

routes.MapRoute(name: "Default",url: "{controller}/{action}/{id}",defaults: new { controller = "Home", action = "

Index"},constraints: new { id = @"\d+"}

);

H & H: Research and Training 9 / 24

Page 12: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les fichier yml

Les routesAutres contraintes (exprimees avec les expressions regulieres)

nbr = @"\d{4}" : pour indiquer que nbr doit contenir 4chiffres

* : 0 ou plusieurs fois

? : 0 ou 1 fois

ˆ : commence par

$ : se termine par

. : n’importe quel caractere

() : le groupe

{n,m} : minimum n fois, maximum m fois

{n} : n fois exactement

{n,} : minimum n fois

H & H: Research and Training 10 / 24

Page 13: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les fichier yml

Les routes

Autres contraintes (exprimees avec les expressions regulieres)

\d : un chiffre

\D : tout sauf un chiffre

\w : un caractere alphanumerique

\W : tout sauf un caractere alphanumerique

\t : un caractere de tabulation

\n : un caractere de retour a la ligne

...

H & H: Research and Training 11 / 24

Page 14: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les fichier yml

Les routes

Autres contraintes (exprimees avec les expressions regulieres)

[a-z] : toutes les lettres entre a et z

[abcd] : a, b, c, ou d

[A-Za-z] : une lettre en majuscule et une en minuscule

[ˆa-d] : tout sauf a, b, c, et d

...

Pour utiliser un caractere reserve (ˆ, $...) dans une expressionreguliere, il faut le preceder par \

H & H: Research and Training 12 / 24

Page 15: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les fichier yml

Les routes

Pour indiquer que le nombre de parametre est indetermine, il fautajouter *

routes.MapRoute(name: "Default",url: "{controller}/{action}/{*id}",defaults: new { controller = "Home", action = "

Index", id = UrlParameter.Optional});

Dans le controleur, il faut recuperer une chaıne de caractere nommeeid contenant la suite de parametres separes par /

H & H: Research and Training 13 / 24

Page 16: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les fichier yml

Les routes

Pour indiquer que le nombre de parametre est indetermine, il fautajouter *

routes.MapRoute(name: "Default",url: "{controller}/{action}/{*id}",defaults: new { controller = "Home", action = "

Index", id = UrlParameter.Optional});

Dans le controleur, il faut recuperer une chaıne de caractere nommeeid contenant la suite de parametres separes par /

H & H: Research and Training 13 / 24

Page 17: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les decorateurs

Les routes

Pour utiliser les decorateurs, il faut

mettre en commentaire les routes definies dans RouteConfig

activer le routage par decorateur

H & H: Research and Training 14 / 24

Page 18: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les decorateurs

Les routes

Nouveau contenu de RouteConfig

public class RouteConfig{

public static void RegisterRoutes(RouteCollection routes)

{routes.IgnoreRoute("{resource}.axd/{*

pathInfo}");

// activer le routage par decorateurroutes.MapMvcAttributeRoutes();

}}

H & H: Research and Training 15 / 24

Page 19: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les decorateurs

Les routes

Pour definir une route home/index

public HomeController : Controller{

[Route("home/index")]public ActionResult Index(){

return View();}

}

H & H: Research and Training 16 / 24

Page 20: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les decorateurs

Les routes

Pour definir une route avec un parametre home/index/{id}

public HomeController : Controller{

[Route("home/index/{id}")]public ActionResult Index(string id){

ViewBag.id = id;return View();

}}

Dans la vue

@ViewBag.id

Ne pas recevoir une valeur pour ce parametre declenche uneexception

H & H: Research and Training 17 / 24

Page 21: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les decorateurs

Les routes

Pour eviter l’exception

public HomeController : Controller{

[Route("home/index/{id?}")]public ActionResult Index(string id){

ViewBag.id = id;return View();

}}

H & H: Research and Training 18 / 24

Page 22: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les decorateurs

Les routes

Pour un parametre de type entier

public HomeController : Controller{

[Route("home/index/{id:int}")]public ActionResult Index(int id){

ViewBag.id = id;return View();

}}

H & H: Research and Training 19 / 24

Page 23: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les decorateurs

Les routes

Pour definir un prefixe pour toutes les routes d’un controleur

[RoutePrefix("home")]public HomeController : Controller{

[Route("index/{id:int}")]public ActionResult Index(int id){

ViewBag.id = id;return View();

}}

En saisissant home/index/3 dans la barre d’adresse, la methodeIndex de HomeController sera executee

H & H: Research and Training 20 / 24

Page 24: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les decorateurs

Les routes

Pour definir un prefixe pour toutes les routes d’un controleur

[RoutePrefix("home")]public HomeController : Controller{

[Route("index/{id:int}")]public ActionResult Index(int id){

ViewBag.id = id;return View();

}}

En saisissant home/index/3 dans la barre d’adresse, la methodeIndex de HomeController sera executee

H & H: Research and Training 20 / 24

Page 25: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les decorateurs

Les routes

Pour detacher le prefixe de la route d’une methode

[RoutePrefix("home")]public HomeController : Controller{

[Route("˜index/{id:int}")]public ActionResult Index(int id){

ViewBag.id = id;return View();

}}

En saisissant home/index/3 dans la barre d’adresse, on auraune erreur. La route index/3 permet d’executer la methodeIndex de HomeController.

H & H: Research and Training 21 / 24

Page 26: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les decorateurs

Les routes

Pour detacher le prefixe de la route d’une methode

[RoutePrefix("home")]public HomeController : Controller{

[Route("˜index/{id:int}")]public ActionResult Index(int id){

ViewBag.id = id;return View();

}}

En saisissant home/index/3 dans la barre d’adresse, on auraune erreur. La route index/3 permet d’executer la methodeIndex de HomeController.

H & H: Research and Training 21 / 24

Page 27: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les decorateurs

Les routes

Pour definir une valeur min pour le parametre id

[RoutePrefix("home")]public HomeController : Controller{

[Route("˜index/{id:int:min{5}}")]public ActionResult Index(int id){

ViewBag.id = id;return View();

}}

En saisissant index/3 dans la barre d’adresse, on aura uneerreur. La route index/6 permet d’executer la methode Index deHomeController.

H & H: Research and Training 22 / 24

Page 28: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les decorateurs

Les routes

Pour definir une valeur min pour le parametre id

[RoutePrefix("home")]public HomeController : Controller{

[Route("˜index/{id:int:min{5}}")]public ActionResult Index(int id){

ViewBag.id = id;return View();

}}

En saisissant index/3 dans la barre d’adresse, on aura uneerreur. La route index/6 permet d’executer la methode Index deHomeController.

H & H: Research and Training 22 / 24

Page 29: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les decorateurs

Les routes

On peut aussi utiliser les fonctions

max

minlength et maxlength

range

regex

...

H & H: Research and Training 23 / 24

Page 30: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les decorateurs

Les routes

Exemple avec les expressions regulieres

[RoutePrefix("home")]public HomeController : Controller{

[Route("˜/index/{id:regex(ˆ0.*9$)}")]public ActionResult Index(int id){

ViewBag.id = id;return View();

}}

Ainsi on impose une valeur pour le parametre id qui commencepar 0 et qui se termine par 9.

H & H: Research and Training 24 / 24

Page 31: ASP.NET MVC : les routes · ASP.NET MVC : les routes Achref El Mouelhi ... du controleur, le deuxiˆ eme sera l’action et le dernier sera le` parametre (donc, cette route autorise

Le routage avec les decorateurs

Les routes

Exemple avec les expressions regulieres

[RoutePrefix("home")]public HomeController : Controller{

[Route("˜/index/{id:regex(ˆ0.*9$)}")]public ActionResult Index(int id){

ViewBag.id = id;return View();

}}

Ainsi on impose une valeur pour le parametre id qui commencepar 0 et qui se termine par 9.

H & H: Research and Training 24 / 24