IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Blog de Hinault Romaric (.NET Core, ASP.NET Core, Azure, DevOps)

[Actualité] Les nouveautés de ASP.NET Core 2.0 Preview – Partie 3 : Introduction à Razor Pages

Noter ce billet
par , 12/07/2017 à 04h42 (2919 Affichages)
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.

Nom : img6.PNG
Affichages : 2170
Taille : 22,4 Ko

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 :

Nom : img5.PNG
Affichages : 2354
Taille : 20,0 Ko

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 - Visualiser dans une fenêtre à part
Dotnet new razor -n NomProjet
Nom : img7.PNG
Affichages : 2060
Taille : 9,5 Ko

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 :

Nom : img.png
Affichages : 2043
Taille : 9,9 Ko

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 :


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

Code cshtml : Sélectionner tout - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
public class AboutModel : 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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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.

Envoyer le billet « Les nouveautés de ASP.NET Core 2.0 Preview – Partie 3 : Introduction à Razor Pages » dans le blog Viadeo Envoyer le billet « Les nouveautés de ASP.NET Core 2.0 Preview – Partie 3 : Introduction à Razor Pages » dans le blog Twitter Envoyer le billet « Les nouveautés de ASP.NET Core 2.0 Preview – Partie 3 : Introduction à Razor Pages » dans le blog Google Envoyer le billet « Les nouveautés de ASP.NET Core 2.0 Preview – Partie 3 : Introduction à Razor Pages » dans le blog Facebook Envoyer le billet « Les nouveautés de ASP.NET Core 2.0 Preview – Partie 3 : Introduction à Razor Pages » dans le blog Digg Envoyer le billet « Les nouveautés de ASP.NET Core 2.0 Preview – Partie 3 : Introduction à Razor Pages » dans le blog Delicious Envoyer le billet « Les nouveautés de ASP.NET Core 2.0 Preview – Partie 3 : Introduction à Razor Pages » dans le blog MySpace Envoyer le billet « Les nouveautés de ASP.NET Core 2.0 Preview – Partie 3 : Introduction à Razor Pages » dans le blog Yahoo

Mis à jour 13/08/2017 à 18h56 par Malick

Catégories
DotNET , C# , ASP.NET , .NET Core , ASP.NET Core

Commentaires

  1. Avatar de Max Lothaire
    • |
    • permalink
    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 - Visualiser dans une fenêtre à part
    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 ?
  2. Avatar de Hinault Romaric
    • |
    • permalink
    Citation Envoyé par Max Lothaire
    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 - Visualiser dans une fenêtre à part
    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.