2013-12-16

3T – ASP.NET MVC

1
Agenda
⦿ Le routage
⦿ Les moteurs de vues
⦿ Web API

2013-12-16

3T – ASP.NET MVC

2
ASP.NET MVC
Le routage

2013-12-16

3T – ASP.NET MVC

3
Le routage
⦿ Pour mémoire …

(Ces images sont issues de la MSDN)
2013-12-16

3T – ASP.NET MVC

4
Le routage
⦿ Et pour ASP.NET MVC ?

Deux impératifs :
- un paramètre controller
- un paramètre action

2013-12-16

3T – ASP.NET MVC

5
Le routage
⦿ La clé ? L’Url Routing Module

2013-12-16

3T – ASP.NET MVC

6
Le routage
⦿ Une route, c’est quoi ?

2013-12-16

3T – ASP.NET MVC

7
Le routage
⦿ Une route, c’est quoi ?

2013-12-16

3T – ASP.NET MVC

8
Le routage
⦿ Des exemples de routes …
routes.MapRoute(
name: "Ma-Premiere-Route",
url: "ma-premiere-route"
);
routes.MapRoute(
name: "Ma-Premiere-Route",
url: "ma-premiere-route/{monParametre}"
);

2013-12-16

3T – ASP.NET MVC

9
Le routage
⦿ … encore des exemples de routes …
routes.MapRoute(
name: "Ma-Premiere-Route",
url: "{controller}/{action}"
);
routes.MapRoute(
"Ma-Premiere-Route",
"{controller}/{action}",
new { controller = "Home", action = "Index"}
);
routes.MapRoute(
"Ma-Premiere-Route",
“ma-page",
new { controller = "Home", action = "Index"}
);
2013-12-16

3T – ASP.NET MVC

10
Le routage
⦿ … et avec des contraintes
routes.MapRoute(
name: "Historique",
url: "{annee}/{mois}/{jour}",
defaults: new { controller = "Home", action =
"Historique" },
constraints: new
{
annee = @"d{4}",
mois = @"d{2}",
jour = @"d{2}"
}
);

2013-12-16

3T – ASP.NET MVC

11
Le routage
⦿ Pour résumer
Arrivée de la
requête

Récupère une
implémentation de
IRouteHandler

Récupère une
implémentation de
IHttpHandler

Prise en charge par
UrlRoutingModule

Pour chaque
route, évalue
également les
contraintes

Exécute
l’implémentation de
IHttpHandler

Parcourt la table de
routage

Cherche une route
dont l’url
correspond à celle
de la requête

Retourne la réponse

2013-12-16

3T – ASP.NET MVC

12
DEMO

2013-12-16

3T – ASP.NET MVC

13
2013-12-16

3T – ASP.NET MVC

14
ASP.NET MVC
Les moteurs de vues

2013-12-16

3T – ASP.NET MVC

15
Les moteurs de vues
⦿ Une action veut retourner une vue …

⦿ Et après ?

2013-12-16

3T – ASP.NET MVC

16
Les moteurs de vues
Contrôleur

ViewResult

ViewEngines
ViewEngines

IView
IView

Return View()
FindView
IView (ou pas)

Render
Rend la main après avoir écrit dans la réponse

Rend la main

2013-12-16

3T – ASP.NET MVC

17
Les moteurs de vues

2013-12-16

3T – ASP.NET MVC

18
Les moteurs de vues : Razor
⦿ Moteur de templating
⦿ Tout est dans le @
⦿ Syntaxe légère
⦿ Une panoplie de Helper extensible
⦿ (mais aussi disponible pour les autres moteurs !)

⦿ Il n’est pas lié qu’à ASP.NET MVC 
2013-12-16

3T – ASP.NET MVC

19
Les moteurs de vues : Razor
⦿ La composition vue d’un fichier _Layout.cshtml

2013-12-16

3T – ASP.NET MVC

20
Les moteurs de vues : Razor
⦿ HTML Helpers

⦿ + Data Annotations

⦿ = Vue

2013-12-16

3T – ASP.NET MVC

21
Les moteurs de vues : Razor
⦿ Une classe est générée pour chaque vue

2013-12-16

3T – ASP.NET MVC

22
Les moteurs de vues : Razor
⦿ Une classe est générée pour chaque vue
⦿

2013-12-16

C:WindowsMicrosoft.NETFramework64v4.0.30319Temporary ASP.NET Files...

3T – ASP.NET MVC

23
DEMO
ModelMetadataProvider

2013-12-16

3T – ASP.NET MVC

24
Démo - ModelMetadataProvider
⦿ Objectifs :
⦿ Générer des formulaires dynamiquement
⦿ Pouvoir extraire des metadata d’une base de
données
⦿ Avoir une cohabitation avec des modèles plus
classiques qui utilisent les data annotations

2013-12-16

3T – ASP.NET MVC

25
DEMO
Razor sans ASP.NET MVC

2013-12-16

3T – ASP.NET MVC

26
Démo – Razor sans ASP.NET MVC
⦿ Objectifs :
⦿ Utiliser Razor pour générer du contenu …

⦿ … dans une application console 

2013-12-16

3T – ASP.NET MVC

27
2013-12-16

3T – ASP.NET MVC

28
ASP.NET MVC
Web API

2013-12-16

3T – ASP.NET MVC

29
Web API
⦿ REST ?

2013-12-16

3T – ASP.NET MVC

30
Web API
⦿ REST ? 3 règles principales
⦿ URI : Identifiant de ressources
⦿ Verbe HTTP : Identifiant d’opération
⦿ Réponse HTTP : Représentation d’une
ressource

2013-12-16

3T – ASP.NET MVC

31
Web API

2013-12-16

3T – ASP.NET MVC

32
Web API
⦿ Des exemples …
⦿ Récupérer un produit ?
⦿ POST ? NON !
⦿ GET ? OUI !
⦿ GET http://monsiteweb/livre/3

2013-12-16

3T – ASP.NET MVC

33
Web API
⦿…
⦿ Créer un produit ?
⦿ GET ? NON !
⦿ POST ? OUI !
⦿ POST http://monsiteweb/livre/creer

⦿ Mais aussi : PUT, DELETE, PATCH, HEAD

2013-12-16

3T – ASP.NET MVC

34
Web API
⦿ Format des données et content negociation
⦿ Entête Accept
⦿ Application/json
⦿ Application/xml
⦿ …
{
"Id":5,
"Nom":"Produit 5"
}
<Produit xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.datacontract.org/2004/07/MvcApplication.Controllers">
<Id>5</Id>
<Nom>Produit 5</Nom>
</Produit>

2013-12-16

3T – ASP.NET MVC

35
Web API
⦿ ASP.NET MVC ou ASP.NET Web API ?

2013-12-16

3T – ASP.NET MVC

36
Web API
⦿ Un modèle similaire à ASP.NET MVC

2013-12-16

3T – ASP.NET MVC

37
Web API
⦿ Et à l’usage ?
public class ValuesController : ApiController
{
public IEnumerable<string> Get()
{
return new[] { "value1", "value2" };
}
}

config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);

2013-12-16

3T – ASP.NET MVC

38
DEMO
Batch Request

2013-12-16

3T – ASP.NET MVC

39
Démo – Batch request
⦿ Objectifs :
⦿ Créer une API qui traiter plusieurs requêtes en
simultanée

2013-12-16

3T – ASP.NET MVC

40
2013-12-16

3T – ASP.NET MVC

41
Pour aller plus loin
⦿ http://blog.soat.fr/author/sebastien-ferrand/

⦿ http://blogs.developpeur.org/leo/

2013-12-16

3T – ASP.NET MVC

42

Soirée 3T Soat - Asp.net MVC

  • 1.
  • 2.
    Agenda ⦿ Le routage ⦿Les moteurs de vues ⦿ Web API 2013-12-16 3T – ASP.NET MVC 2
  • 3.
  • 4.
    Le routage ⦿ Pourmémoire … (Ces images sont issues de la MSDN) 2013-12-16 3T – ASP.NET MVC 4
  • 5.
    Le routage ⦿ Etpour ASP.NET MVC ? Deux impératifs : - un paramètre controller - un paramètre action 2013-12-16 3T – ASP.NET MVC 5
  • 6.
    Le routage ⦿ Laclé ? L’Url Routing Module 2013-12-16 3T – ASP.NET MVC 6
  • 7.
    Le routage ⦿ Uneroute, c’est quoi ? 2013-12-16 3T – ASP.NET MVC 7
  • 8.
    Le routage ⦿ Uneroute, c’est quoi ? 2013-12-16 3T – ASP.NET MVC 8
  • 9.
    Le routage ⦿ Desexemples de routes … routes.MapRoute( name: "Ma-Premiere-Route", url: "ma-premiere-route" ); routes.MapRoute( name: "Ma-Premiere-Route", url: "ma-premiere-route/{monParametre}" ); 2013-12-16 3T – ASP.NET MVC 9
  • 10.
    Le routage ⦿ …encore des exemples de routes … routes.MapRoute( name: "Ma-Premiere-Route", url: "{controller}/{action}" ); routes.MapRoute( "Ma-Premiere-Route", "{controller}/{action}", new { controller = "Home", action = "Index"} ); routes.MapRoute( "Ma-Premiere-Route", “ma-page", new { controller = "Home", action = "Index"} ); 2013-12-16 3T – ASP.NET MVC 10
  • 11.
    Le routage ⦿ …et avec des contraintes routes.MapRoute( name: "Historique", url: "{annee}/{mois}/{jour}", defaults: new { controller = "Home", action = "Historique" }, constraints: new { annee = @"d{4}", mois = @"d{2}", jour = @"d{2}" } ); 2013-12-16 3T – ASP.NET MVC 11
  • 12.
    Le routage ⦿ Pourrésumer Arrivée de la requête Récupère une implémentation de IRouteHandler Récupère une implémentation de IHttpHandler Prise en charge par UrlRoutingModule Pour chaque route, évalue également les contraintes Exécute l’implémentation de IHttpHandler Parcourt la table de routage Cherche une route dont l’url correspond à celle de la requête Retourne la réponse 2013-12-16 3T – ASP.NET MVC 12
  • 13.
  • 14.
  • 15.
    ASP.NET MVC Les moteursde vues 2013-12-16 3T – ASP.NET MVC 15
  • 16.
    Les moteurs devues ⦿ Une action veut retourner une vue … ⦿ Et après ? 2013-12-16 3T – ASP.NET MVC 16
  • 17.
    Les moteurs devues Contrôleur ViewResult ViewEngines ViewEngines IView IView Return View() FindView IView (ou pas) Render Rend la main après avoir écrit dans la réponse Rend la main 2013-12-16 3T – ASP.NET MVC 17
  • 18.
    Les moteurs devues 2013-12-16 3T – ASP.NET MVC 18
  • 19.
    Les moteurs devues : Razor ⦿ Moteur de templating ⦿ Tout est dans le @ ⦿ Syntaxe légère ⦿ Une panoplie de Helper extensible ⦿ (mais aussi disponible pour les autres moteurs !) ⦿ Il n’est pas lié qu’à ASP.NET MVC  2013-12-16 3T – ASP.NET MVC 19
  • 20.
    Les moteurs devues : Razor ⦿ La composition vue d’un fichier _Layout.cshtml 2013-12-16 3T – ASP.NET MVC 20
  • 21.
    Les moteurs devues : Razor ⦿ HTML Helpers ⦿ + Data Annotations ⦿ = Vue 2013-12-16 3T – ASP.NET MVC 21
  • 22.
    Les moteurs devues : Razor ⦿ Une classe est générée pour chaque vue 2013-12-16 3T – ASP.NET MVC 22
  • 23.
    Les moteurs devues : Razor ⦿ Une classe est générée pour chaque vue ⦿ 2013-12-16 C:WindowsMicrosoft.NETFramework64v4.0.30319Temporary ASP.NET Files... 3T – ASP.NET MVC 23
  • 24.
  • 25.
    Démo - ModelMetadataProvider ⦿Objectifs : ⦿ Générer des formulaires dynamiquement ⦿ Pouvoir extraire des metadata d’une base de données ⦿ Avoir une cohabitation avec des modèles plus classiques qui utilisent les data annotations 2013-12-16 3T – ASP.NET MVC 25
  • 26.
    DEMO Razor sans ASP.NETMVC 2013-12-16 3T – ASP.NET MVC 26
  • 27.
    Démo – Razorsans ASP.NET MVC ⦿ Objectifs : ⦿ Utiliser Razor pour générer du contenu … ⦿ … dans une application console  2013-12-16 3T – ASP.NET MVC 27
  • 28.
  • 29.
  • 30.
    Web API ⦿ REST? 2013-12-16 3T – ASP.NET MVC 30
  • 31.
    Web API ⦿ REST? 3 règles principales ⦿ URI : Identifiant de ressources ⦿ Verbe HTTP : Identifiant d’opération ⦿ Réponse HTTP : Représentation d’une ressource 2013-12-16 3T – ASP.NET MVC 31
  • 32.
  • 33.
    Web API ⦿ Desexemples … ⦿ Récupérer un produit ? ⦿ POST ? NON ! ⦿ GET ? OUI ! ⦿ GET http://monsiteweb/livre/3 2013-12-16 3T – ASP.NET MVC 33
  • 34.
    Web API ⦿… ⦿ Créerun produit ? ⦿ GET ? NON ! ⦿ POST ? OUI ! ⦿ POST http://monsiteweb/livre/creer ⦿ Mais aussi : PUT, DELETE, PATCH, HEAD 2013-12-16 3T – ASP.NET MVC 34
  • 35.
    Web API ⦿ Formatdes données et content negociation ⦿ Entête Accept ⦿ Application/json ⦿ Application/xml ⦿ … { "Id":5, "Nom":"Produit 5" } <Produit xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/MvcApplication.Controllers"> <Id>5</Id> <Nom>Produit 5</Nom> </Produit> 2013-12-16 3T – ASP.NET MVC 35
  • 36.
    Web API ⦿ ASP.NETMVC ou ASP.NET Web API ? 2013-12-16 3T – ASP.NET MVC 36
  • 37.
    Web API ⦿ Unmodèle similaire à ASP.NET MVC 2013-12-16 3T – ASP.NET MVC 37
  • 38.
    Web API ⦿ Età l’usage ? public class ValuesController : ApiController { public IEnumerable<string> Get() { return new[] { "value1", "value2" }; } } config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); 2013-12-16 3T – ASP.NET MVC 38
  • 39.
  • 40.
    Démo – Batchrequest ⦿ Objectifs : ⦿ Créer une API qui traiter plusieurs requêtes en simultanée 2013-12-16 3T – ASP.NET MVC 40
  • 41.
  • 42.
    Pour aller plusloin ⦿ http://blog.soat.fr/author/sebastien-ferrand/ ⦿ http://blogs.developpeur.org/leo/ 2013-12-16 3T – ASP.NET MVC 42