- EssentialCSharp.Web - The site seen at essentialcsharp.com
For any bugs, questions, or anything else with specifically the code found inside the listings (listing examples code), please submit an issue at the EssentialCSharp Repo.
For information on setting up your local development environment, please see the Getting Started Guide.
The shared layout uses ViewData["Description"] for the HTML, Open Graph, and Twitter descriptions; pages without an override use the site-wide fallback. Public page actions set their own descriptions. Chapter pages use Chapters/sitemap.descriptions.json when available (generated by ParserCli), or a description based on the chapter heading when the file is absent. Views can also set ViewData["Description"] before the layout renders.
The layout renders exactly one canonical link (and a matching og:url) for every successful, non-Identity page. Its origin always comes from SiteSettings:BaseUrl, so each deployment must set it to its own origin (for example SiteSettings__BaseUrl=https://dev.essentialcsharp.com for the dev environment). The request Host header is deliberately not used, to avoid host-header poisoning. For chapter pages, the path from the parser-generated canonical is kept (so alias routes such as /hello-world point to the primary page) and re-based onto the configured origin; the parser's own <link rel="canonical"> is removed from the injected head. Other pages use the request path. Query strings are excluded.
Please use issues or discussions to report issues found.