Bij het doorlezen van de specs voor het examen van 70-486 (link) komen zaken naar voren als "choose between ASP.NET Core and ASP.NET", "configure middleware to enable session and application state in ASP.NET Core", "work with static files in ASP.NET core", "implement ASP.NET Core Identity". Ik kwam bij het voorbereiden voor dit examen een opmerking van iemand tegen dat het boek "Programming ASP.NET Core" hiervoor geschikt zou zijn. Ik ben benieuwd of deze zaken in dit boek behandeld worden.
Maandag 24 september begin ik met het eerste hoofdstuk. Voor het examen kun je dit hoofdstuk wel overslaan, wel is het informatief. Het geeft de geschiedenis weer van het .NET Framework en de uitbreidingen die daarop toegevoegd zijn (MVC, WebAPI). Daarna werd duidelijk dat de boel wat meer "licht-gewicht" moest worden, cross-platform (Windows, Linux, Mac) en de boel meer "uit" IIS gehaald wordt zodat het ook via andere webservers of de eigen webserver kan draaien. Ook dat in 1999 de eerste versie gepresenteerd werd en het toen nog ASP+ heette en toen gedemonstreerd werd door een jonge Scott Guthrie. De Scott die ik in 2017 bij de Azure Red Shirt Dev Tour '17 heb horen spreken ( link ).
Dinsdag 25 september door met hoofdstuk 2. Dit gaat al wat meer de diepte in. Hieruit blijkt dat de Core ook echt Core is. Wil je statische bestanden gebruiken (css, js), dan moet je een app.UseStaticFiles toevoegen. Dit is ook een tip van de auteur die het toevoegen in het begin nog wel eens wilde vergeten en niet snapte waarom javascript en stylesheets niet ingeladen wilden worden, terwijl de bestanden wel degelijk aanwezig waren. Wil je ook nog door de mappen kunnen "browsen", dan moet je een app.UseDirectoryBrowser() toevoegen (dit is iets wat je eigenlijk standaard niet wilt, daarom is het inderdaad prima dat dit standaard uit staat). We krijgen hier een voorbeeld van een leeg project, je heb daarin de hoofdmap waar Program.cs en StartUp.cs staat en een map wwwroot waar alle webpagina's/code in komt. In de StartUp.cs kun je de configuratie instellen, en ook de verschillende modus (development, staging, production). Vervolgens wordt uitgelegd hoe modulair / met interfaces de code ingericht is, zodat de projecten ook perfect met unit-testen gecontroleerd kunnen worden. Tips van de auteur van dit boek zijn dat bestandsnamen bij Windows niet case-sensitive zijn (TEST.txt is gelijk aan test.TXT), maar dat dit op Mac en Linux wel verschillende bestanden (en dus controlewaarden) zijn.
Woensdag 26 september, hoofdstuk 3. Dit hoofdstuk gaat over het instellen van de configuratie voor MVC, een goed leesbaar hoofdstuk. Over hoe je met services.AddMvc() een flink deel van MVC functionaliteit aanzet, maar mocht je bijvoorbeeld geen API-zaken willen hebben, dan kun je ook los de statements services.AddMvcCore(); services.AddViews(); en services.AddRazorViewEngine(); aanroepen. Daarna een overzicht hoe je de routing instelt en hoe, als deze niet gematcht kan worden, uiteindelijk opgepakt door de middleware, dus het Run() statement waarmee je eventueel een soort 404 terug zou kunnen geven. Daarna nog een overzicht van de route-instellingen, hoe je constraints toe kunt voegen en data-tokens (je komt op de Home-pagina, maar ben je daar rechtstreeks heen gegaan, of ben je via een catch-all daarop gekomen, zodat je nog een soort melding zou kunnen tonen?).
Vrijdag 28 september, hoofdstuk 4. Gisteren naar de Ziggo Dome geweest, concert van ELO, dus hoewel ik de vrijdagavond meestal niet in plan voor studie vandaag toch maar even een hoofdstuk. In dit hoofdstuk worden de MVC Controllers besproken. Opzet van het hoofdstuk is duidelijk en omdat ik al met MVC in wat in dit boek de "classic ASP.NET" gewerkt heb is een groot deel van de materie niet nieuw voor mij. Wel deels. Zo is het benoemen van de controller bekend (voor Home controller, noem je deze HomeController). Maar je mag deze nu ook Home noemen als deze erft van de Controller. Ook kan er een POCO (plain old csharp object) gebruikt worden die niet van de Controller erft. Wederom optimalisatie met het gebruik van resources. Wel mis je hier een (flink) aantal zaken. Je hebt de HTTPContext niet (automatisch) beschikbaar. Je kunt bepaalde actiefilters niet uitvoeren, je kunt niet 1-2-3 bij je Razor-views. Maar voor sommige "simpele" acties kan dit best handig zijn. Vervolgens het mappen van de acties/methoden. Met [HttpPost] en [HttpGet] het request afvangen. Met [NoAction] alleen intern beschikbaar maken. Met [ActionName(...)] een scheiding aanbrengen tussen de externe en interne naam. Het doorgeven van parameters/waardes met FromQuery, FromPost of FromBody. Maar nu ook FromHeaders om daar gegevens uit te halen. Een overzicht van de verschillende ActionResults. ActionFilters en de mij nog niet bekende ActionMethodSelectorAttribute, waarmee je bijvoorbeeld kunt afdwingen dat bepaalde functies alleen via AJAX-calls aangeroepen mogen worden. Of misschien juist helemaal niet.
Zaterdag 29 september, hoofdstuk 5. De klok tikt door, dus maar even tempo maken met dit boek. Hoofdstuk 5 gaat over Views. We beginnen met de verschillende manieren om HTML terug te geven. De terminating middleware, genoemd in mijn stukje over hoofdstuk 3. Als je geen extra zaken toevoegt kun je in de Run-methode waar je altijd doorheen gaat de HTML teruggeven. Of je doet dat in een Controller. Dat zijn basic methoden, de meest gebruikte is via Views en Razor pagina's. Je kunt in .NET Core nu ook "los" .cshtml-bestanden aanroepen (het .cshtml-bestand moet dan beginnen met @page en in de Pages-map staan). Met de ViewLocationFormats kun je aangeven in welke mappen de .cshtml-bestanden kunnen staan. Met ExpandViewLocationExpander kun je dit uitvoeren en hoef je niet meer zelf een eigen View Engine te maken. Mocht je dat toch willen doen, dan baseer je die op de IViewEngine. Het schijnt dat een groepje ontwikkelaars dit heeft gedaan om Markdown te kunnen gebruiken voor HTML. Als ik op Google zoek, lijkt dat het Markdig-project te zijn, ook via NuGet beschikbaar. Hierbij het linkje van de Github-locatie: link. Vervolgens uitleg hoe je data door kunt geven naar de view, via de ViewData, de ViewBag en het model. Volgens de auteur moet je juist niet de Entity Class gebruiken, maar een eigen ViewModel-class. Met @inject kun je extra gegevensbronnen in je view "injecteren". Ook dit was niet een ingewikkeld hoofdstuk.
Zondag 30 september, hoofdstuk 6. Dit hoofdstuk gaat over de Razor-syntax. Het eerste deel over de combinatie van HTML en code is niet onbekend. Het onderdeel over Tag-Helpers is interessant, deze functionaliteit zit alleen in de ASP.NET Core en is niet iets voor de "klassieke" ASP.NET. Je kunt je eigen Tag Helpers schrijven. Het hoofdstuk sluit af met een paragraaf over View Components, die lijken op child actions en partial views.
Het boek heeft 16 hoofdstukken, na de eerste 6 hoofdstukken is mijn indruk dat het een goed leesbaar boek is, redelijk veel informatie bekend is, maar de items die besproken worden en die ik nog niet kende duidelijk uitgelegd worden. Door met de rest van de hoofdstukken!