1 Asp.Net MVC et WEB API I. MVC ......................................................................................................................................................... 4 1. « FROM SCRATCH » - DEMARRER AVEC UN PROJET ASP.NET VIDE................................................................................. 4 2. ROUTES ............................................................................................................................................................. 8 a. RouteConfig ................................................................................................................................................ 8 b. Attribut Route ............................................................................................................................................. 9 c. Area ........................................................................................................................................................... 10 d. Récupérer les informations de route ........................................................................................................ 11 3. CONTROLEURS ................................................................................................................................................... 12 a. « Action Result » ....................................................................................................................................... 12 b. Index ......................................................................................................................................................... 12 c. Détails ....................................................................................................................................................... 13 d. Create ....................................................................................................................................................... 13 e. Edit ............................................................................................................................................................ 14 f. Delete ........................................................................................................................................................ 14 g. Actions asynchrones ................................................................................................................................. 15 h. Actions Selectors ....................................................................................................................................... 15 i. Action filters ......................................................................................................................................... 16 j. Contrôleur Mvc comme Web Service ........................................................................................................ 17 4. VIEWS ............................................................................................................................................................. 20 a. _ViewStart ........................................................................................................................................... 22 b. _Layout (Master page/ Page de disposition) ....................................................................................... 22 @RenderSection() ...................................................................................................................................................... 23 c. Définir le modèle de la vue .................................................................................................................. 23 d. Html Helpers ........................................................................................................................................ 23 e. Code expressions pour insérer du C# dans le HTML .......................................................................... 25 Code blocks ................................................................................................................................................................ 25 f. Scripts .................................................................................................................................................. 25 g. SelectList .............................................................................................................................................. 26 h. Moteur de vue Aspx ............................................................................................................................. 26 i. Ajax Helpers ......................................................................................................................................... 26 Ajax Form ................................................................................................................................................................... 27 Ajax ActionLink........................................................................................................................................................... 28 5. VALIDATION ...................................................................................................................................................... 29 a. Data Annotations ................................................................................................................................. 29 b. IValidatableObject ............................................................................................................................... 31 c. Modifier le style des erreurs ................................................................................................................ 32 d. Validation côté « Client » avec jQuery Validation Plugin ................................................................... 32 6. SECURITE ..................................................................................................................................................... 33 a. Windows (Intranet) .............................................................................................................................. 33 b. « From scratch » - Sécurité « Forms » avec un projet Asp.Net vide .................................................... 34 Packages NuGet ......................................................................................................................................................... 34 Préparation ................................................................................................................................................................ 34 « IdentityConfig » (dossier « App_Start ») ............................................................................................................ 34 ApplicationUser..................................................................................................................................................... 36 Classe partielle « Startup » ................................................................................................................................... 37 Base de données ................................................................................................................................................... 38 2 Personnalisation des pages ................................................................................................................................... 38 Contrôleurs et ViewModels .................................................................................................................................. 39 Inscription (register) .................................................................................................................................................. 40 Connexion (Login) ...................................................................................................................................................... 43 Connexion «externe » avec Facebook, Google, Twitter ............................................................................................ 48 Facebook ............................................................................................................................................................... 48 Google ................................................................................................................................................................... 50 Twitter................................................................................................................................................................... 52 Code supplémentaire ............................................................................................................................................ 52 c. Autorisations (attribut « Authorize ») .................................................................................................. 55 ValidateAntiForgeryToken ......................................................................................................................................... 56 AntiXSS ....................................................................................................................................................................... 57 d. SSL ........................................................................................................................................................ 57 e. Projet Visual Studio 2012 ..................................................................................................................... 58 InitializeSimpleMembership et WebSecurity ............................................................................................................. 58 SimpleRoleProvider et SimpleMembershipProvider ................................................................................................. 59 Register ...................................................................................................................................................................... 60 Login .......................................................................................................................................................................... 60 7. LOCALISATION .............................................................................................................................................. 61 Dates et Monnaies........................................................................................................................................ 61 Resources ...................................................................................................................................................... 62 8. LESS ........................................................................................................................................................... 63 9. DEPENDENCY INJECTION (DI) .......................................................................................................................... 63 Avec Ninject ............................................................................................................................................................... 63 10. UPGRADE ................................................................................................................................................ 64 II. WEB API ................................................................................................................................................. 65 1. Web Api config ..................................................................................................................................... 65 2. Contrôleur Web Api ............................................................................................................................. 65 a. HTTP Status codes ............................................................................................................................................ 65 b. Ajout d’un contrôleur Web Api ........................................................................................................................ 65 c. Contrôleur Web API avec IhttpActionResult .................................................................................................... 66 d. Contrôleur Web API avec HttpResponseMessage ............................................................................................ 68 3. Attribut “Route” ................................................................................................................................... 71 4. Injection de dépendances .................................................................................................................... 71 Avec Ninject ............................................................................................................................................................... 71 5. Projet Client ......................................................................................................................................... 72 a. dataService JavaScript ...................................................................................................................................... 72 b. HttpClient ......................................................................................................................................................... 73 6. Cors ...................................................................................................................................................... 75 7. Formatters pour le « Mapping » .......................................................................................................... 76 8. OData................................................................................................................................................... 76 9. Authentification Web Api .................................................................................................................... 77 10. MongoDB ........................................................................................................................................ 82 a. Installation de MongoDB C# driver .................................................................................................................. 82 b. Service WEB ..................................................................................................................................................... 83 III. BOOTSTRAP ........................................................................................................................................... 86 1. INSTALLATION ET THEMES ............................................................................................................................... 86 2. GRID SYSTEM ............................................................................................................................................... 87 a. Cacher une colonne selon une résolution ............................................................................................ 87 b. Décalage de colonnes avec « offset » .................................................................................................. 88 2 3 c. Image flottante .................................................................................................................................... 88 3. BASES ......................................................................................................................................................... 88 a. Typographie ......................................................................................................................................... 88 b. Boutons, groupes de boutons et dropdowns ....................................................................................... 89 c. Icones ................................................................................................................................................... 90 d. Formulaires, listes, et tables ................................................................................................................ 90 « input-group » .......................................................................................................................................................... 90 e. Navbar desktop et mobile .................................................................................................................... 90 f. Header et breadcrumb ......................................................................................................................... 91 g. Pagination............................................................................................................................................ 91 h. Well ...................................................................................................................................................... 92 i. Panels .................................................................................................................................................. 92 PLUGINS .............................................................................................................................................................. 92 a. Collapse et accordéon .......................................................................................................................... 92 b. Boite de dialogue ................................................................................................................................. 93 c. Alert ..................................................................................................................................................... 93 d. Tab ....................................................................................................................................................... 94 e. Tooltip .................................................................................................................................................. 94 f. Caroussel.............................................................................................................................................. 95 3 4 MVC I. Modèles/ ROUTES Contrôleur Va chercher Données les données « http://... / » « contrôleur »/« action »/« id » Action Result Vue (Affiche les données) Vue partielle « content » (texte, xml) JSON Redirection etc. 1. « From scratch » - Démarrer avec un projet Asp.Net vide 1. Créer un projet Asp.Net vide 2. Installer « Asp.Net Mvc 5 » avec les packages NuGet 3. Ajouter « RouteConfig » dans un dossier « App_Start » using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; namespace MvcFromScratch { public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) Définition des routes de { l’application. Ici la route par routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); défaut dirigeant vers l’action routes.MapRoute( « Index » du contrôleur « Home » name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); } } } 4 5 4. Ajouter fichier de configuration de l’application « Global.asax» using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; namespace MvcFromScratch { public class Global : System.Web.HttpApplication { Enregistrement des routes protected void Application_Start() { définies dans le fichier RouteConfig.RegisterRoutes(RouteTable.Routes); « RouteConfig » } } } 5. Ajouter un contrôleur « Home » dans un dossier « Controllers » using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MvcFromScratch.Controllers { public class HomeController : Controller L’ « action result » ici est { // GET: Home une chaine de caractère. public ActionResult Index() Cela affichera juste ce { message dans une page return Content("Bonjour!"); } } } Projet minimum 5 6 Avec Vue en « action result » public ActionResult Index() { return View(); } Vues : « _ViewStart.cshtml » hérite de « StartPage » (System.Web.Mvc) sert à définir la master page « par défaut » utilisée par toutes les pages de contenu. Toutes les autres pages héritent de « WebViewPage » (_Lauout, Index, etc.) 2 possibilités : Soit définir en haut de chaque vue la page dont elle hérite Exemple « _ViewStart.cshtml » @inherits System.Web.WebPages.StartPage @{ Layout = "~/Views/Shared/_Layout.cshtml"; } « _Layout.cshtml » la master page (ou page de disposition) @inherits System.Web.Mvc.WebViewPage <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>@ViewBag.Title</title> </head> <body style="background:red;"> <div> @RenderBody() </div> </body> </html> 6 7 Soit on crée un fichier de configuration « Web.config » pour le dossier des vues « Views » pour ne pas avoir à définir sur chaque page <?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> </sectionGroup> </configSections> <system.web.webPages.razor> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Routing" /> <add namespace="MvcFromScratch" /> </namespaces> </pages> </system.web.webPages.razor> </configuration> Ainsi on peut simplifier les pages… par exemple « _ViewStart.cshtml » On supprime l’héritage en @{ haut des pages Layout = "~/Views/Shared/_Layout.cshtml"; } Projet minium avec vues et master page Les vues sont rangées dans un dossier portant le nom de leur contrôleur _Layout.cshtml la master page _ViewStart.cshtml permet de définir la master page à appliquer par défaut aux pages de contenu 7 8 2. Routes a. RouteConfig Définir les routes de l’application dans « RouteConfig » (dossier « App_Start ») public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { action = "Index", controller="People", id = UrlParameter.Optional } ); } } Créer une seconde route public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) On place la route au-dessus de { la route « par défaut » routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); La route routes.MapRoute( name: "Ma route", « http://.../personal/ » url: "personal/{myparameter}", defaults: new { controller = "Home", action = "Personal", myparamete r = "Bonjour" } ); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); } } Dans le contrôleur « Home », on ajoute l’action pour cette route public class HomeController : Controller { // code retiré public ActionResult Personal(string myparameter) { return Content(myparameter); } } 8 9 Renvoie par défaut la valeur définie dans « RouteConfig » Paramètre passé Dans le cas où on aurait pas défini de paramètre de route routes.MapRoute( name: "Ma route", url: "personal", defaults: new { controller = "Home", action = "Personal"} ); … On pourrait quand même passer un paramètre à l’action (code inchangé) en le nommant b. Attribut Route Permettre l’utilisation de public class RouteConfig l’attribut « route » { .Attention de bien mettre public static void RegisterRoutes(RouteCollection routes) avant la route par défaut { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapMvcAttributeRoutes(); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); } } Utilisation : Dans le contrôleur « Home » [Route("personal")] public ActionResult Personal() { return Content("Route ok!"); } Si on veut ajouter des paramètres, les mettre entre accolades [Route("personal/{message}")] public ActionResult Personal(string message) { return Content(message); } 9 10 c. Area Il peut être intéressant de découper les gros projets en « Areas » Exemple public class MusicAreaRegistration : AreaRegistration { public override string AreaName { get { return "Music"; } } public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "Music_default", "Music/{controller}/{action}/{id}", new { action = "Index", id = UrlParameter.Optional }, namespaces: new[] { "AreaDemo.Areas.Music.Controllers" } ); } } « Global.asax » AreaRegistration.RegisterAllAreas(); 10
Description: