4. 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
5. 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
6. 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
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 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
9. 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
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 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
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
15. 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
16. 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]")
17. 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
18. 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
19. 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
});
20. 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)
{
}
}
21. 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
22. 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