Architecture - vue d'ensemble
Principe general
Ce repo est un gabarit Umbraco minimal et reutilisable. Une seule application runtime (src/Web/) heberge Umbraco 17 ; il n'y a volontairement pas de couche metier separee. Les projets aval ajoutent au besoin des projets Application (metier), Domain (entites) et Persistence (DbContext, migrations) - absents du template.
Le projet hote contient l'echafaudage commun : composition Umbraco, points d'extension (content finder, controllers techniques), SEO, consentement cookies, personnalisations backoffice, pipeline frontend Vite et deploiement Docker.
Structure de solution
UmbracoBaseTemplate.sln (a renommer dans chaque projet aval) regroupe :
| Projet | Dossier | Role |
|---|---|---|
| Web | src/Web/ | Seul projet runtime. Application Umbraco. |
| Tests.Common | tests/Common/ | Base de test partagee (TestBase). Le csproj s'appelle Tests.Common mais le dossier est Common - decalage intentionnel (voir README). |
| Tests.Web | tests/Web/ | Tests du projet Web ; reproduit l'arborescence de src/Web/. Contient un DummyTest d'exemple. |
Bootstrap (src/Web/Program.cs)
Modele top-level statements (pas de classe Startup). Ordre :
- En Development, charge
appsettings.local.json(optionnel, git-ignore). - Bind
CookieConsentOptions(sectionCookieConsent). - Configure
StaticFileOptions.OnPrepareResponse:/csset/jssont fingerprintes (asp-append-version), doncCache-Control: public,max-age=31536000,immutable; les autres assets ontmax-age=604800. ImageSharp gere ses propres en-tetes pour/media. builder.CreateUmbracoBuilder().AddBackOffice().AddWebsite().AddDeliveryApi().AddComposers().Build().- Sentry : charge uniquement si
Staging/ProductionETSentryUrlnon vide. Prod : 10% trace sampling ; Staging : ajouteProfilingIntegration(500 ms). - Page d'exception dev si Development ou
ForceDisplayDeveloperExceptionPage=true, sinonUseExceptionHandler("/error"). UseRewriter(rewrites IISrewriteRules.xml) uniquement en Staging/Production.BootUmbracoAsync()puisUseUmbraco()(middleware + endpoints backoffice et website).
Composition (src/Web/SiteComposer.cs)
IComposer unique, decouvert par AddComposers(). Il :
- enregistre
NotFoundContentFindercommeContentLastChanceFinder(404 par site), - enregistre
UmbracoUserAppAuthenticatorcomme provider 2FA backoffice.
C'est le point central pour ajouter des enregistrements DI et des wire-ups Umbraco.
Flux de requete
- Page editoriale : Umbraco route vers le template correspondant au document type (
HomePage.cshtml, etc.) qui rend via_MasterLayout.cshtml. - 404 : aucun contenu trouve ->
NotFoundContentFinderresout la racine du site (match du host sur les domaines Umbraco) puis cherche un enfant de typenotFoundPage; rendNotFoundPage.cshtml. - 500 / erreurs :
UseExceptionHandler("/error")->ErrorController(~/error/, chemin reserve) ; un 500 redirige vers le noeudinternalServerErrorPage, sinon vers/. - Endpoints techniques :
SitemapController(/sitemap, XML multilingue),RobotsController(/robots.txt),DevLoginController(/l, DEBUG uniquement).
Detail des extensions : ../modules/extensibility.md.
Acces aux donnees
Le template n'a pas de couche d'acces aux donnees custom ni d'ORM additionnel : tout passe par l'API Umbraco (IPublishedContent + modeles ModelsBuilder) et la base Umbraco (SQL Server). Un projet aval qui a besoin de tables propres ajoutera un projet Persistence.
ModelsBuilder
Mode SourceCodeAuto (appsettings.json) : Umbraco genere des classes C# typees dans src/Web/umbraco/Models (namespace Web.umbraco.Models) a partir des document types. Ces fichiers *.generated.cs ne doivent pas etre edites a la main. Les extensions (PageExtensions) castent IPublishedContent vers les interfaces generees (IPageSettings) ; elles ne compilent qu'une fois les modeles produits.
Fichiers cles
| Sujet | Fichier |
|---|---|
| Bootstrap / pipeline HTTP | src/Web/Program.cs |
| Composition / DI | src/Web/SiteComposer.cs |
| Content finder 404 | src/Web/ContentFinders/NotFoundContentFinder.cs |
| Controller d'erreur | src/Web/Controllers/ErrorController.cs |
| Helpers SEO | src/Web/Extensions/PageExtensions.cs |
| Layout principal | src/Web/Views/Layouts/_MasterLayout.cshtml |
| Config | src/Web/appsettings.json |

