Points d'extension Umbraco
Le coeur du template. Tous les enregistrements passent par SiteComposer ; les comportements techniques (404, 500, sitemap, robots, login dev) sont des controllers ou des content finders.
Composer (src/Web/SiteComposer.cs)
IComposer unique, decouvert par AddComposers() dans Program.cs. Il :
builder.SetContentLastChanceFinder<NotFoundContentFinder>();- enregistre le service du dashboard "Système" :
builder.Services.AddSingleton<IDashboardInfoService, DashboardInfoService>(); - enregistre le provider 2FA :
new BackOfficeIdentityBuilder(builder.Services).AddTwoFactorProvider<UmbracoUserAppAuthenticator>(UmbracoUserAppAuthenticator.Name).
C'est le point d'entree pour tout nouveau wire-up (DI, notification handlers, content finders...).
Page 404 par site (ContentFinders/NotFoundContentFinder.cs)
IContentLastChanceFinder (constructeur primaire : IDomainService, IPublishedContentCache). Logique :
- Recupere tous les domaines Umbraco (
GetAllAsync(true)). - Trouve celui dont
DomainNamecorrespond a l'authority de la requete (teste brut,https://,http://). - Determine la racine du site (
RootContentId) ; fallback sur le premier domaine. - Cherche un enfant de la racine dont le content type est
NotFoundPage.ModelTypeAlias. - Si trouve,
SetPublishedContent; retournetruesi un contenu a ete pose.
Permet une page 404 differente par site dans une instance multi-sites.
Erreurs 500 (Controllers/ErrorController.cs)
Route ~/error/ (declaree dans ReservedPaths), branchee via UseExceptionHandler("/error") (Program.cs, hors dev). Si le status est 500, redirige vers le premier noeud internalServerErrorPage ; sinon redirige vers /.
Sitemap (Controllers/SitemapController.cs)
RenderController, route /sitemap, ResponseCache 600 s. Construit un sitemap XML unique multilingue :
- resout la racine via le host (match sur les domaines), retombe sur le premier domaine sinon ;
- part du noeud
homePage; parcourt recursivement les enfants ; - n'inclut un noeud que s'il a un url segment, un template (vraie page) et n'est pas masque du sitemap (
HideFromSiteMap) ; forcehttps;lastmodau format W3C.
robots.txt (Controllers/RobotsController.cs)
Route /robots.txt, cache 24 h. En production : sert uniquement la ligne sitemap: (URL absolue https du sitemap). Hors production : user-agent: * + disallow: / (blocage indexation).
Login dev (Controllers/DevLoginController.cs)
#if DEBUG uniquement. Route GET /l. Double garde : compile en DEBUG ET check runtime IWebHostEnvironment.IsDevelopment() (sinon 404). Recupere jusqu'a 500 utilisateurs, prend le premier dont l'email finit par @spektrummedia.com, le connecte (non persistant) et redirige vers /umbraco. Ne jamais retirer une des deux gardes.
Extensions de contenu (src/Web/Extensions/)
PageExtensions:GetHeadTitle,GetMetaTitle,GetMetaDescription,GetOgTitle,GetOgDescription(resolution par priorite via l'interface genereeIPageSettings).DateTimeExtensions(ex.FormatAsW3CDateTimepour le sitemap),MediaWithCropsExtensions,PublishedContentExtensions(ex.GetAbsoluteUrl,GetTemplateAlias,HideFromSiteMap),UmbracoContextExtensions(ex.GetCultureFromDomains).

