Les nouveautés de ASP.NET Core 2.0 Preview -
Partie 3 : introduction à Razor Pages, par Hinault Romaric

Le , par Hinault Romaric, Responsable .NET
Ceci est le troisième et dernier billet de cette série. Vous pouvez consulter les billets précédents :





L’utilisation du modèle MVC oblige le développeur à adopter un pattern dans la mise en place de son application. Ce découpage impose l’utilisation de nombreux fichiers. Pour une petite application, l’utilisation du modèle MVC entraine plus d’effort et impose la maitrise d’ASP.NET Core MVC.

Pour les développeurs qui veulent mettre en place de petites applications Web sans avoir à faire face aux contraintes architecturales qu’impose MVC, Razor Pages est désormais offert avec ASP.NET Core 2.0. Razor Pages peut également être pratique pour les débutants ou les développeurs qui ont précédemment utilisé ASP.NET WebForms.

Razor Pages offre un modèle de programmation permettant d’inclure dans un fichier .cshtml du code HTML, CSS, JavaScript et C# pour produire une page Web, sans avoir recours à un contrôleur comme avec MVC.

Razor Pages existait déjà sous ASP.NET. Ce dernier avait été introduit avec l’IDE WebMatrix, sous le nom de WebPages. Toutefois, Razor Pages était disponible séparément tout comme WebForms, MVC et Web API. Dans ASP.NET Core, MVC et WebAPI ont été fusionnés. C’est également le cas avec Razor Pages.


Le package Microsoft.AspNetCore.Mvc permet d’exploiter toutes les fonctionnalités de Razor Pages. Toutefois, elles sont disponibles dans l’espace de nommage suivant :

Microsoft.AspNetCore.Mvc.RazorPages

Après avoir installé ASP.NET Core 2.0 et la préversion de Visual Studio 2017 Update 1, vous verrez un nouveau modèle de projet dans la liste des templates pour Razor Pages :


Si vous ne disposez pas de Visual Studio, le nouveau modèle est également disponible dans les templates des outils de développement pour .NET Core. Pour créer un nouveau projet Razor Pages, il suffit d’utiliser la commande suivante :

Code : Sélectionner tout
Dotnet new razor -n NomProjet

La structure d’une application Razor Pages est très différente de celle d’une application MVC, comme vous pouvez le constater avec la capture ci-dessous :


Nous n’avons pas de dossier Controlleur et non plus de dossier Views. Nous avons juste un dossier Pages, avec des vues Razor.

Un fichier Razor Pages commence avec l’instruction suivante :

Code cshtml : Sélectionner tout
@page

Pour séparer le contenu de présentation de la logique métier. Razor Pages offre l’instruction @functions :

Code cshtml : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@page 
 
@functions{ 
 
    public string Message { get; set; } 
 
    public void OnGet() 
    { 
        Message = "Your application description page."; 
    } 
 
} 
 
@{ 
    ViewData["Title"] = "About"; 
} 
<h2>@ViewData["Title"].</h2> 
<h3>@Message</h3> 
 
<p>Use this area to provide additional information.</p>

Le code ci-dessus, avant le rendu de la page va exécuter au préalable la méthode OnGet(). Razor Pages apporte une convention pour exécuter les méthodes (action) en fonction des requêtes HTTP. Ainsi, pour une requête HTTP Get sur une Razor Pages, la fonction OnGet dans le code de cette page sera automatiquement exécutée. Pour une requête Post, la fonction OnPost() sera exécutée.

Pour permettre une meilleure séparation du code, Razor Pages introduit la notion de PageModel. Au lieu d’avoir une seule page About.cshtml, nous aurons également une page About.cshtml.cs, qui va contenir la classe AboutModel, qui hérite de PageModel.
Dans cette page, nous aurons le code-behind de notre page :

Code c# : Sélectionner tout
1
2
3
4
5
6
7
8
9
public class AboutModel&nbsp;: PageModel 
    { 
        public string Message { get; set; } 
  
        public void OnGet() 
        { 
            Message = "Your application description page."; 
        } 
    }

Et le contenu de la page About.cshtml devient ceci :

Code cshtml : Sélectionner tout
1
2
3
4
5
6
7
8
@page 
@model AboutModel 
@{ 
    ViewData["Title"] = "About"; 
} 
<h2>@ViewData["Title"].</h2> 
<h3>@Model.Message</h3> 
<p>Use this area to provide additional information.</p>

Le contenu du fichier Program.cs et Startup.cs reste identique qu’avec un projet MVC. Dans un autre billet consacré uniquement à Razor Pages, je vais présenter de façon plus détaillée cette nouveauté.

Journalisation

Un autre aspect intéressant de ASP.NET Core 2.0 est la configuration de la journalisation. La méthode Configure() de la classe Startup ne prend plus en paramètre un ILoggerFactory pour injecter dans le pipeline HTTP le middleware pour la journalisation.

La configuration de la journalisation se fait dans la méthode CreateDefaultBuilder() qui ajoute les modes Console et Debug. Ce qui est intéressant, c’est l’utilisation du fichier appsettings.json pour la configuration de la journalisation :

Code json : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
"Logging": { 
    "IncludeScopes": false, 
    "Debug": { 
      "LogLevel": { 
        "Default": "Warning" 
      } 
    }, 
    "Console": { 
      "LogLevel": { 
        "Default": "Warning" 
      } 
    } 
  } 
}


ASP.NET Core 2.0 Preview apporte plusieurs nouveautés et améliorations assez intéressantes. Je n’ai présenté que celles qui ont le plus attiré mon attention. Je pourrais dans un prochain billet de blog évoquer les autres nouveautés de la plateforme.

Notez qu’il s’agit d’une préversion. De ce fait, avant la sortie de la version stable, l’implémentation de certaines fonctionnalités pourrait changer.


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster un commentaire

Avatar de Max Lothaire Max Lothaire - Membre confirmé https://www.developpez.com
le 24/08/2017 à 18:44
Bonjours, merci pour ce billet.

Par contre, comment ASP.NET fait pour déterminé s'il doit afficher une razorpage ou faire appelle à un controller ?

Sur mon projet test, je n'ai aucun controller et j'ai cette route là :

Code c# : Sélectionner tout
1
2
3
4
5
6
7
  
app.UseMvc(routes => 
{ 
    routes.MapRoute( 
    name: "default", 
    template: "{controller}/{action=Index}/{id?}"); 
});

Faut-il comprendre que si il n'y a pas de controller dans le chemin de la requête, l'application va chercher dans les razorpages ?
Avatar de Hinault Romaric Hinault Romaric - Responsable .NET https://www.developpez.com
le 29/08/2017 à 23:38
Citation Envoyé par Max Lothaire;bt5736
Bonjours, merci pour ce billet.

Par contre, comment ASP.NET fait pour déterminé s'il doit afficher une razorpage ou faire appelle à un controller ?

Sur mon projet test, je n'ai aucun controller et j'ai cette route là :

Code c# : Sélectionner tout
1
2
3
4
5
6
7
  
app.UseMvc(routes => 
{ 
    routes.MapRoute( 
    name: "default", 
    template: "{controller}/{action=Index}/{id?}"); 
});

Faut-il comprendre que si il n'y a pas de controller dans le chemin de la requête, l'application va chercher dans les razorpages ?

Dans ASP.NET Core, il y a eu une fusion de MVC, Web API et Razor. De ce fait, la table de routage par défaut utilisé dans le framework offre une prise en charge de ces trois modeles de projet. Mais, la route par défaut reste cela connu avec MVC. Lorsque tu saisi un lien. Par exemple : localhost/admin/index ou localhost/admin. Bien que ta route par defaut soit celui ci-dessus, ASP.NET Core ira chercher la vue Pages/admin/index.cshtml. Donc en l'absence de contrôleur, le framework va chercher la vue dans le dossier Pages. Alors s'il est possible de faire du WebAPI et du MVC dans le même projet, il ne sera pas possible de combiner Razor Pages et MVC dans le même projet. Ce qui est logique, vu que Razor Pages est offert comme alternative à MVC.
Offres d'emploi IT
Développeur Full Stack
Bigoudy - Midi Pyrénées - Toulouse (31000)
Développeur Symfony 3 H/F
SidePulse - Ile de France - Boulogne-Billancourt
Java Developer
Thanksys - Ile de France - Paris (75000)

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique Accueil