Controller/[Link] ViewModels/ToDoAddVM.
cs
public class TodosController : Controller{ public class ToDoAddVM{
ISessionManagerService session; [Required(ErrorMessage = "Le libelle est obligatoire")]
public TodosController(ISessionManagerService session){ public string Libelle { get; set; }
[Link] = session;} [Required]
public IActionResult Index(){ public string Description { get; set; }
List<Todo> list = [Link]<List<Todo>>("todos",HttpContext); [DataType([Link])]
[Link] = [Link]; public DateTime DateLimite { get; set; }
return View();} [Required]
public IActionResult Add(){ public State Statut { get; set; }
return View();} }
[HttpPost] [Link]
public IActionResult Add(ToDoAddVM vm){ //Add services to the container.
if(![Link]){ [Link]();
return View(); //si le nom de la fct a ete confirm [Link]();
nous ajoutant le nom de la view return View("Add")} [Link]<ISessionManagerService,
List<Todo> list; SessionManagerService>();
if([Link]("todos") == null){ [Link](
list = new List<Todo>();} name: "default",
else{ pattern: "{controller=Todos}/{action=Index}/{id?}");
list = [Link]<List<Todo>>("todos", HttpContext);}
=> .Net Framework/ .Net code/ .Net
Todo todo = [Link](vm);
→ Net Framework
[Link](todo);
Derniere version: 4.8
[Link]("todos", list, HttpContext);
openSource
return RedirectToAction(nameof(Index));}
MONO est la version qui peut etre installee sur Linux
}
Enums/[Link] → Net core
namespace [Link]{ Microsoft offre Multi-platform / cross-platform
public enum State{ Derniere version: 3.1 en decembre 2020
TODO = 0, DOING = 1, DONE = 2} → Net
} Merge le s2 frameworks framework et core
Mappers/[Link] nouvelle version publiee chaque Novembre
public class TodoMapper{ Derniere version: .NET 10.0 en decembre 2025
public static Todo GetTodoFromTodoAddVM(ToDoAddVM vm){ .Net Standard: Tableau de compatbilite pour une bonne
return new Todo{ communication entre les fournisseurs les bibliotheques et les
Libelle = [Link], developpeurs.
Description = [Link], CLR: common language runtime, environnement d’execution de
DateLimite = [Link], code.
Statut = [Link]}; =>[Link] Core MVC: framework OpenSource pour gerer le
} sapplications web et des API avec MVC.
} → Un Model gere la logic metier et l’acces a la base de donnees.
Models/[Link] → Un Controller recoit les requetes HTTP, traite les actions CRUD, et
public class Todo{ envoie les donnees du model vers la view.
public string Libelle { get; set; } → Razor: Moteur d’affichage = Moteur de template plus simple pour
public string Description { get; set; } programmer en front.
public DateTime DateLimite { get; set; } → Routage: Mecanisme qui permet de a un URL de dessiner une
public State Statut { get; set; } route, il peut etre soit Automatique soit Personalise.
} → Middleware: Logicciel assenble dans un pipeline d’application
Enums/[Link] pour la gestion des requetes et des repenses.
namespace [Link]{
public class ErrorViewModel{ => Vue generale d’un projet:
public string? RequestId { get; set; } → wwwroot: contient des fichiers images, videos, js et css.
public bool ShowRequestId =>![Link] ->[Link]: contient la fonction Main().
(RequestId);} → ASP: verifie l’environnement s’il est en developpement pour
} changer la faocn d’affichage de messages d’erreurs, et il cree les
Services/[Link]
environnements (Developpement, Production, Staging).
namespace [Link]{
[Link](): redirige la requete HTTP vers HTTPS.
public interface ISessionManagerService{
[Link](): divise l’url, et determine la cible de l’utilisateur.
public void Add(string key, object list, HttpContext context);
[Link](): verification des droits d’acces d’user.
public T Get<T>(string key, HttpContext context);}
[Link](): responsable du contenue statique.
}
[Link](
Services/[Link]
name : “default”,
public class SessionManagerService : ISessionManagerService{
pattern :”{controller=Home}/{action=Index}/{id?})
public void Add(string key, object list, HttpContext context){
.withStaticAssets().
String chaine = [Link](list);
[Link](): bloque l’execution de l’app jusqu’a la reponse.
[Link](key, chaine);}
=> Moyen de communications:
public T Get<T>(string key, HttpContext context){
@ViewData[“Name”] ViewData[“Name”]=”Bill”
return [Link]<T>([Link]
@[Link] [Link]=”Bill”
(key) ?? "[]");}
→ Message d’erreur [Required] manuellement:
}
[Required (ErrorMessage = “le nom est obligatoire”)]
=> State Management: Maintenence d’une app des informtions => Execution:
relatives a travers le temps et les diff interactions, il est important → ExecuteNonQuery: utilisee avec Insert, update, Delete.
car (maintenir la coherence de l’interface user, preservation des → ExecuteReader: pour les requetes select non-scalaires (requetes
donnees utilisateurs) avec plus d’une valeur)
=>Sessions: → ExecuteScalar: pour les requetes scalaire (requetes avec 1 seul
→ Aventages: 1. Majorite de travail automatque, 2. 4. infos → 1 val)
cookie, 3. taille illimtee => Open Close: objet instancie est compose de 2 fonctions:
→ Inconvenients: 1. Surcharge la machine server, 2. vol de session → open(): ouvre la connection a un server sql. ([Link]())
=> Cookies: → close(): fermeture de la conection une foi la requete envoyee.
→ Aventages: 1. Majorite de travail automatique, 2. soulage le server. ([Link]()).
→ Inconvenients: 1. 1 info par cookie, 2. taille limitee (4KO), 3.
repositories/[Link]
Surchare la machine client, 4. vol de cookie.
public class CategoriesRepository : ICategoriesRepository{
=> JWT:
IConfiguration conf;
→ Aventages: 1. maintenabilite, 2. tolerence aux pannes.
public CategoriesRepository(IConfiguration conf){
→ Inconvenients: 1. majorite de travail manuelle, 2. vol de token.
addSession(): ajoute les services de sessions a l’app via l’injection [Link] = conf; }
de dependance. public void Add(Category c) {
useSessionn(): ajoute le middleware de session dans le pipeline de SqlConnection cn = new SqlConnection(conf.
requete HTTP. GetConnectionString("ehei"));
→ Ajouter: [Link](“cle”,”valeur”); [Link]();
→ Modfier: [Link](“cle”,”valeur”); SqlCommand cmd = new SqlCommand("Insert into categories
→ Supprimer: [Link](“cle”); values('" + [Link] + "')", cn);
→ Vider: [Link](); [Link]();
→ Recuperer: string value = [Link](“cle”)?””; [Link](); }
=> Serialisation et deserialisation: public List<Category> GetAll(){
→ serialisation: objet/liste → chaine de caracteres. List<Category> list = new List<Category>();
→ deserialisation: chaine de caracteres → objet/liste SqlConnection cn = new SqlConnection
=> JsonSerialiser: ([Link]("ehei"));
→ serialiser: string jsonResult=[Link](s) [Link]();
→ deserialisation: Student student = [Link] SqlCommand cmd = new SqlCommand("select * from
<Student>(jsonString)?? new student(); categories", cn);
=> Cookies: SqlDataReader rd = [Link]();
→ Ajouter: [Link](“cle”,”val”); while ([Link]())
→ Modfier: [Link](“cle”,”val”); Category c = new Category();
→ Supprimer: [Link](“cle”); [Link] = rd["libelle"].ToString();
→ Recuperer: string value = [Link][“cle”]?””; [Link] = [Link](rd["id"].ToString());
=> Les filtres sous ASP Core: s’utilisent si le code se repete au debut [Link](c);
et a la fin d’une action, pour centraliser le code, et gerer les }
problemes transversaux. [Link]();
Public void IActionResult Index(){ [Link]();
[Link](); return list;
[Link](); }
//Mon Code }
[Link]();
[Link](); => Injection de dependances: la possibilite de travailler avec un
=> ADO .Net: Ancienne biblio utilisee pour la gestion de SGBDR. objet sans instancier entre classe x et classe y.
→ SGBDR et ADO .Net: → les etapes pour injecter:
SQL Connection: permet d’instancier un objet pourla 1. Creation d’interface Iservice avec le prototype des actions.
communication avec la BD et qui a besoin de: 1. Adresse IP du 2. implementer l’interface service:Iservice
serveur, 2. Nom de BD, 3. Login et pass/ auth windows, 4. 3. Enregistre dans DI [Link]
Presence d’encryptage [Link]<IService, service>();
→ SQLConnection avec auth windows: 4. Injecter via le constructeur
SQLConnection conn = new SQLConnection(“Data source = 5. utilisation
.\\SQLExpress; “ + “Initial catalog = db;” + “Integrated security=true”
+ “Encript = false”); AddSingleton: 1. instenciation couteuse, 2. objet de vie iliimite, 3.
→ SQLConnection avec login et password: une seule instentiation.
SQLConnection conn = new SQLConnection(“Data source = AddSingleton<ICategoryRepository, CategoryRepository()>
.\\SQLExpress; “ + “Initial catalog = db;” + “User Id = myUsername; AddScoped: 1. instruction puis destruction, 2. duree de vie plus
Password = myPassword” + “Encript = false”); cours, 3. nombre d’instenciation = nbr de requetes.
SQLCommand: instancie un objet qui execute une requete sous AddTransiet: 1. deconseille, 2. requete peut avoir plusieurs
serveur de BD. nstenciations et destructions, 3. nombre insentiations = nombre
→ declaration d’un obj avec construct d’initialisation: d’injections.
SQLCommand cmd = new SQLCommande(“insert into villes values pooling: 1. instentiation plusieurs objets, 2. between addSingleton
(‘oujda’), conn); et addScoped.
→ Declaration d’un obj avec construct d’initialisation:
SQLCommand cmd = new SQLCommande();
[Link] = “insert into villes values(‘oujda’)”;
[Link] = conn;
SQLDataReader.