Aspnet.core
Introduction
Introduction à ASP.NET
Architecture .NET Core : Une
architecture multiplateforme
Template dans Visual Studio 2015 / 2017
 Il existe 3 projets dans .NET core
 La class librarie permettant de créer une librairie en .net
 La console Application qui permet de s’exécuter en console
 ASP.NET Core Web Application pour l’application Web
Première approche avec un projet
ASP.NET Core
 Architecture et principe généraux
Site ASP.NET
APPLICATION
SERVEUR
APPLICATION
CLIENT
Projet library class
Nuget packages
Wwwroot :
ressources statiques
Packages bower
Tasks grunt/gulp
Où est mon global.asax ?
 Comme avec Owin remplacé par la classe Startup
 2 Méthodes s’exposent désormais à
 ConfigureServices pour les services
 Configure pour la configuration du pipeline, extensible pour récupérer les
différents objets à injecter à Configure
Qu’est-ce qu’un Service ?
 1 Service est une classe instancié par l’injecteur de dépendances .net core et qui a pour
objectif de partager des fonctionnalités avec l’ensemble de votre application. Il existe les
types suivants
 Antiforgery permet de luter contre les attaques de sécurité
 Authorization permet de fournir un service d’authentification et d’autorisation
 Cors permet de fournir un service de gestion des Cors
 Data Protection permet de fournir un service de gestion des données
 DirectoryBrowser permet de fournir un service qui permet d’explorer des fichiers
 DistributedMemoryCache permet de fournir un service de gestion de cache distribué
 MemoryCache permet de fournir le service de gestion de cache local
 EntityFramework permet de suppléer via DI l’entité-framework
 Localization permet de suppléer le service de localisation utilisé par l’application
 Logging permet de fournir le fournisseur de logue
 MVC pour fournir le service MVC
 Routing pour le routage des URL
 Scoped fourni un injecteur personnalisé de niveau scope
 Singleton fourni un injecteur personnalisé de niveau singleton (une seule instance par
application)
 Transient fourni un injecteur personnalisé de niveau requête
 WebEncoder permet de gérer les encodeurs de HTML, Url et Javascript
Comment j’utilise un service ?
 Il existe différentes façons
d’utiliser un service
 Depuis l’injection automatique
via le constructeur d’un
contrôleur
 Depuis l’injection automatique
via une propriété
 Depuis la propriété
RequestServices
 Pour déclarer le service il faut
passer une interface
 Pour l’enregistrer il faut modifier
la classe Startup
Mais où est donc mon fichier de
configuration ?
 Asp.net core utilise plusieurs types
de fichiers de configuration
 Fichier (json, xml, ini)
 Command line
 Variables d’environnement
 Objet .Net stocké en mémoire
 Database
 Custom
 Mais rien n’est déclaré par défaut,
contrairement à ASP.NET, donc il
faut déclarer le bon service dans la
classe startup. Exemple pour du
json
Mais comment on écrit un fichier
maintenant ?
 Comme nous l’avons vu, ASP.net
core fonctionne sur Linux,
Windows, et Mac donc on ne
peut utiliser le system.Io de
Windows car il est indépendant
de la plateforme. Pour pouvoir
travailler avec des fichiers, il
faut implémenter un service qui
implémente l’interface
IFileProvider
 On peut dire que System.IO.File
a été remplace par le provider
PhysicalFileProvider
Support multiple environnement
 Aspnet core introduit
la gestion multi-
environnement
nécessaire
 Vous pouvez définir
des paramètres et des
comportements
spécifiques par
environnement
Un fichier Program dans un projet Web ?
 Et oui, Aspnet core a fini avec le support direct et lié
à IIS, il faut désormais activer une application pour
tourner, c’est pourquoi il y a cette classe Program.
 Pour configurer le hoster IIS, il faut l’activer dans
Main de cette classe
 Ce qui offre des avantages
 On peut également facilement capturer les
erreurs de démarrage du domaine
 On peut également recupérer les détails des
erreurs capturés
 On peut définir le chemin Root
 On peut définir l’environnement d’exécution
 On peut définir le binding directement des Url
 On peut spécifier l’assembly qui contient la
classe Startup
 On peut ajouter le gestionnaire de configuration
à utiliser
Ok, mais côté client on perd
l’optimisation Web de l’Aspnet
 Effectivement le composant Web
optimization de Microsoft n’existe
plus dans Aspnet core et a été
remplacé directement par des
tâches gulp ou grunt
 Une vrai séparation du
développement client et serveur a
été mise en place
 Les développeurs web travailleront
en c#
 Les développeurs front
travailleront en jquery et auront
gulp ou grunt pour leur tâche
d’optimisation, nettoyage,
optimisation
Créer votre premier site
Architecture MVC
 A l’Instar de ASP.NET 4.6, ASP.NET Core est basée sur une architecture MVC
 Partage des responsabilités entre les 3 composants
 Le Model contient l’entité à utiliser
 La Vue contient l’apparence visuelle
 Le Controller contient le traitement et les règles de gestion
 ASP.NET Core MVC offre les fonctionnalités suivantes
 Routage
 Model Validation
 Injection de dépendance
 Filtre
 Zonage
 Web API
 Testabilité facilitée
 Razor
 Vue fortement typée
 Tag helper
 View component
Routage
 ASP.NET core fournit deux méthodes pour le Routage
 Enregistrement des routes à utiliser :
 routes.MapRoute(name: "Default", template: "{controller=Home}/{action=Index}/{id?}");
 Déclaration d’une route
 [Route("api/[controller]")
Model Validation
 Binding automatique des formulaires HTML avec les entités
 Utilisation des décorateurs pour spécifier les règles de validation : Required,
MinLength, MaxLength, DataType, StringLength, Compare
 Utilisation de ModelState.IsValid pour valider automatiquement qu’une entité
bindée est valide pour l’ensemble des ces décorateurs ou non
 Utilisation possible du framework Javascript jquery-validation pour la
validation côtée client
 Injection possible côté code c# via les constructeurs et les propriétés
 Utilisation de la meta @inject pour injecter côté Razor et Vue
Injection de dépendances
Filtre
 Nous avons vue qu’il est possible de personnalisé le pipeline ASP.NET par filtre
 Nous avons vue qu’il existe différents types de filtres
 Autorisation pour la sécurité sur un controller
 Resource pour implémenter le mécanisme de cache
 Action pour exécuter du code avant et après l’exécution de l’action
 Exception pour capturer une excpetion
 Result pour éxecuter du code avant et après l’appel de l’action
 Filtre est implémentée par une interface spécifique exemple IActionFilter
 Les interfaces des filtres sont fournies avec leur correspond asynchrone
 Le framework .NET core fourni également des filtres de base
 ActionFilterAttribute
 ExceptionFilterAttribute
 ResultFilterAttribute
 FormatFilterAttribute
 ServiceFilterAttribute
 TypeFilterAttribute
 Le filtre est enregistré par l’option du middleware :
services.AddMvc(options =>
{
options.Filters.Add(new AddHeaderAttribute("GlobalAddHeader",
"Result filter added to MvcOptions.Filters")); // an instance
});
Filtre (suite)
 Nous avons vu que l’ordre d’exécution d’un filtre peut être modifié
 [AddHeader("Author", "Michel Bruchet @StartPoint", Order =3)]
 Nous avons vue qu’il est possible désactiver l’exécution d’un filtre en surchargeant le
result
public class ShortCircuitingResourceFilterAttribute : Attribute,
IResourceFilter
{
public void OnResourceExecuting(ResourceExecutingContext context)
{
context.Result = new ContentResult()
{
Content = "Resource unavailable - header should not be set"
};
}
public void OnResourceExecuted(ResourceExecutedContext context)
{
}
}
 Moyen de diviser proprement un site en plusieurs sous site
 Possibilité d’utiliser un dossier spécifique
 Possibilité de regrouper les vues, les controllers par zone
 Possibilité de diviser le site par domaine fonctionnel
Zonage
Autre vidéo
 Merci pour votre assiduité, je vais publié beaucoup d’autre vidéo, technique
(ASP.NET Core / Service Fabric / Powershell / etc..) que de gestion de
projets, architecture d’entreprise
 Vous pouvez me contacter par
 email : mbruchet@live.fr
 Linkedin : https://www.linkedin.com/in/michelbruchet
 Facebook : https://www.facebook.com/michel.bruchet.3
StartPoint
Logiciel de comptabilité et de gestion

Aspnetcore introduction

  • 1.
  • 2.
  • 3.
    Architecture .NET Core: Une architecture multiplateforme
  • 4.
    Template dans VisualStudio 2015 / 2017  Il existe 3 projets dans .NET core  La class librarie permettant de créer une librairie en .net  La console Application qui permet de s’exécuter en console  ASP.NET Core Web Application pour l’application Web
  • 5.
    Première approche avecun projet ASP.NET Core  Architecture et principe généraux Site ASP.NET APPLICATION SERVEUR APPLICATION CLIENT Projet library class Nuget packages Wwwroot : ressources statiques Packages bower Tasks grunt/gulp
  • 6.
    Où est monglobal.asax ?  Comme avec Owin remplacé par la classe Startup  2 Méthodes s’exposent désormais à  ConfigureServices pour les services  Configure pour la configuration du pipeline, extensible pour récupérer les différents objets à injecter à Configure
  • 7.
    Qu’est-ce qu’un Service?  1 Service est une classe instancié par l’injecteur de dépendances .net core et qui a pour objectif de partager des fonctionnalités avec l’ensemble de votre application. Il existe les types suivants  Antiforgery permet de luter contre les attaques de sécurité  Authorization permet de fournir un service d’authentification et d’autorisation  Cors permet de fournir un service de gestion des Cors  Data Protection permet de fournir un service de gestion des données  DirectoryBrowser permet de fournir un service qui permet d’explorer des fichiers  DistributedMemoryCache permet de fournir un service de gestion de cache distribué  MemoryCache permet de fournir le service de gestion de cache local  EntityFramework permet de suppléer via DI l’entité-framework  Localization permet de suppléer le service de localisation utilisé par l’application  Logging permet de fournir le fournisseur de logue  MVC pour fournir le service MVC  Routing pour le routage des URL  Scoped fourni un injecteur personnalisé de niveau scope  Singleton fourni un injecteur personnalisé de niveau singleton (une seule instance par application)  Transient fourni un injecteur personnalisé de niveau requête  WebEncoder permet de gérer les encodeurs de HTML, Url et Javascript
  • 8.
    Comment j’utilise unservice ?  Il existe différentes façons d’utiliser un service  Depuis l’injection automatique via le constructeur d’un contrôleur  Depuis l’injection automatique via une propriété  Depuis la propriété RequestServices  Pour déclarer le service il faut passer une interface  Pour l’enregistrer il faut modifier la classe Startup
  • 9.
    Mais où estdonc mon fichier de configuration ?  Asp.net core utilise plusieurs types de fichiers de configuration  Fichier (json, xml, ini)  Command line  Variables d’environnement  Objet .Net stocké en mémoire  Database  Custom  Mais rien n’est déclaré par défaut, contrairement à ASP.NET, donc il faut déclarer le bon service dans la classe startup. Exemple pour du json
  • 10.
    Mais comment onécrit un fichier maintenant ?  Comme nous l’avons vu, ASP.net core fonctionne sur Linux, Windows, et Mac donc on ne peut utiliser le system.Io de Windows car il est indépendant de la plateforme. Pour pouvoir travailler avec des fichiers, il faut implémenter un service qui implémente l’interface IFileProvider  On peut dire que System.IO.File a été remplace par le provider PhysicalFileProvider
  • 11.
    Support multiple environnement Aspnet core introduit la gestion multi- environnement nécessaire  Vous pouvez définir des paramètres et des comportements spécifiques par environnement
  • 12.
    Un fichier Programdans un projet Web ?  Et oui, Aspnet core a fini avec le support direct et lié à IIS, il faut désormais activer une application pour tourner, c’est pourquoi il y a cette classe Program.  Pour configurer le hoster IIS, il faut l’activer dans Main de cette classe  Ce qui offre des avantages  On peut également facilement capturer les erreurs de démarrage du domaine  On peut également recupérer les détails des erreurs capturés  On peut définir le chemin Root  On peut définir l’environnement d’exécution  On peut définir le binding directement des Url  On peut spécifier l’assembly qui contient la classe Startup  On peut ajouter le gestionnaire de configuration à utiliser
  • 13.
    Ok, mais côtéclient on perd l’optimisation Web de l’Aspnet  Effectivement le composant Web optimization de Microsoft n’existe plus dans Aspnet core et a été remplacé directement par des tâches gulp ou grunt  Une vrai séparation du développement client et serveur a été mise en place  Les développeurs web travailleront en c#  Les développeurs front travailleront en jquery et auront gulp ou grunt pour leur tâche d’optimisation, nettoyage, optimisation
  • 14.
  • 15.
    Architecture MVC  Al’Instar de ASP.NET 4.6, ASP.NET Core est basée sur une architecture MVC  Partage des responsabilités entre les 3 composants  Le Model contient l’entité à utiliser  La Vue contient l’apparence visuelle  Le Controller contient le traitement et les règles de gestion  ASP.NET Core MVC offre les fonctionnalités suivantes  Routage  Model Validation  Injection de dépendance  Filtre  Zonage  Web API  Testabilité facilitée  Razor  Vue fortement typée  Tag helper  View component
  • 16.
    Routage  ASP.NET corefournit deux méthodes pour le Routage  Enregistrement des routes à utiliser :  routes.MapRoute(name: "Default", template: "{controller=Home}/{action=Index}/{id?}");  Déclaration d’une route  [Route("api/[controller]")
  • 17.
    Model Validation  Bindingautomatique des formulaires HTML avec les entités  Utilisation des décorateurs pour spécifier les règles de validation : Required, MinLength, MaxLength, DataType, StringLength, Compare  Utilisation de ModelState.IsValid pour valider automatiquement qu’une entité bindée est valide pour l’ensemble des ces décorateurs ou non  Utilisation possible du framework Javascript jquery-validation pour la validation côtée client
  • 18.
     Injection possiblecôté code c# via les constructeurs et les propriétés  Utilisation de la meta @inject pour injecter côté Razor et Vue Injection de dépendances
  • 19.
    Filtre  Nous avonsvue qu’il est possible de personnalisé le pipeline ASP.NET par filtre  Nous avons vue qu’il existe différents types de filtres  Autorisation pour la sécurité sur un controller  Resource pour implémenter le mécanisme de cache  Action pour exécuter du code avant et après l’exécution de l’action  Exception pour capturer une excpetion  Result pour éxecuter du code avant et après l’appel de l’action  Filtre est implémentée par une interface spécifique exemple IActionFilter  Les interfaces des filtres sont fournies avec leur correspond asynchrone  Le framework .NET core fourni également des filtres de base  ActionFilterAttribute  ExceptionFilterAttribute  ResultFilterAttribute  FormatFilterAttribute  ServiceFilterAttribute  TypeFilterAttribute  Le filtre est enregistré par l’option du middleware : services.AddMvc(options => { options.Filters.Add(new AddHeaderAttribute("GlobalAddHeader", "Result filter added to MvcOptions.Filters")); // an instance });
  • 20.
    Filtre (suite)  Nousavons vu que l’ordre d’exécution d’un filtre peut être modifié  [AddHeader("Author", "Michel Bruchet @StartPoint", Order =3)]  Nous avons vue qu’il est possible désactiver l’exécution d’un filtre en surchargeant le result public class ShortCircuitingResourceFilterAttribute : Attribute, IResourceFilter { public void OnResourceExecuting(ResourceExecutingContext context) { context.Result = new ContentResult() { Content = "Resource unavailable - header should not be set" }; } public void OnResourceExecuted(ResourceExecutedContext context) { } }
  • 21.
     Moyen dediviser proprement un site en plusieurs sous site  Possibilité d’utiliser un dossier spécifique  Possibilité de regrouper les vues, les controllers par zone  Possibilité de diviser le site par domaine fonctionnel Zonage
  • 22.
    Autre vidéo  Mercipour votre assiduité, je vais publié beaucoup d’autre vidéo, technique (ASP.NET Core / Service Fabric / Powershell / etc..) que de gestion de projets, architecture d’entreprise  Vous pouvez me contacter par  email : mbruchet@live.fr  Linkedin : https://www.linkedin.com/in/michelbruchet  Facebook : https://www.facebook.com/michel.bruchet.3 StartPoint Logiciel de comptabilité et de gestion