Code Betekenis Eerste ding om te controleren
200 gelukt Staat er ook echt data in het antwoord?
201 gemaakt Zelfde als 200, maar netter bij een POST
400 je verzoek klopt niet Je JSON heeft een komma te veel of een aanhalingsteken te weinig
404 niet gevonden Typefout in je adres, of het ding bestaat echt niet
405 verkeerd werkwoord Je staat in Bruno op GET terwijl je endpoint een DELETE is
415 verkeerd formaat Zet in Bruno het tabblad Body op JSON
500 jouw code is gecrasht Kijk in de terminal, daar staat de echte melding

Fouten in je endpoints

Melding Oorzaak Oplossing
Body was inferred but the method does not allow inferred body parameters Je MapGet of MapDelete heeft een parameter die uit de body zou moeten komen Haal (Resultaat r) weg. Een GET en een DELETE hebben alleen () of (int id)
AmbiguousMatchException: The request matched multiple endpoints Twee keer hetzelfde werkwoord op hetzelfde adres Zoek je adres in Program.cs. Je hebt er waarschijnlijk één gekopieerd en het werkwoord niet aangepast
IndexOutOfRangeException Je vraagt de reader om kolom 4 terwijl je SELECT er maar vier heeft Tel je kolommen in de SELECT. De eerste is 0, dus vijf kolommen lopen tot 4
InvalidCastException GetString op een getal, of GetInt32 op tekst Leg je SELECT naast je reader-regels. Welke kolom staat op welk nummer?
NullReferenceException bij het lezen Een kolom in de database is NULL Vul de rij, of vang het op met reader.IsDBNull(0)
MySqlException: Unknown column '...' in 'field list' Je typt een kolomnaam die niet bestaat Draai DESCRIBE resultaten; in MySQL en vergelijk letterlijk
MySqlException: Table 'trainforge.resultaten' doesn't exist Je CREATE TABLE is nooit gelukt, of je zit in de verkeerde database SHOW TABLES; in MySQL
MySqlException: Access denied for user 'trainforge' Wachtwoord of gebruikersnaam in je verbindingstekst klopt niet Vergelijk de verbindingstekst bovenin Program.cs met wat je in MySQL hebt aangemaakt
Unable to connect to any of the specified MySQL hosts MySQL draait niet, of je poort klopt niet Start MySQL en test eerst met het mysql commando
Cannot add or update a child row: a foreign key constraint fails Je verwijst naar een cursist die niet bestaat Kijk met SELECT * FROM cursisten; welke id's er echt zijn
Cannot delete or update a parent row Je verwijdert een cursist die nog resultaten heeft Verwijder eerst de resultaten, of gebruik een andere cursist

Fouten bij het bouwen

Deze zie je voordat je API opstart. Visual Studio Code onderstreept ze rood.

Melding Oorzaak Oplossing
CS0103: The name 'Verbinding' does not exist Typefout, of hoofdletter verkeerd C# let op hoofdletters. verbinding en Verbinding zijn twee dingen
CS1061: 'Resultaat' does not contain a definition for 'cursist' In C# schrijf je r.Cursist met hoofdletter, de kleine letters zijn alleen voor de JSON Gebruik de naam zoals hij in je record staat
CS8852: Init-only property can only be assigned... Je probeert een veld van een record te veranderen Een record maak je in één keer compleet. Maak een nieuwe aan
CS1002: ; expected Puntkomma vergeten Kijk op de regel boven het onderstreepte stukje
CS1513: } expected Accolade niet gesloten Klik op de openende accolade, Visual Studio Code kleurt de bijbehorende
CS4033: The 'await' operator can only be used within an async method async vergeten voor je lambda async () => in plaats van () =>
Address already in use Je API draait nog in een ander venster Zoek het oude terminalvenster en stop het met Ctrl+C

Fouten in het mysql-venster

Melding Oorzaak Oplossing
ERROR 1064 (42000): You have an error in your SQL syntax near 'mysql -h ...' Je typt een terminalcommando terwijl je nog in MySQL zit Typ eerst exit en voer het daarna opnieuw uit
ERROR 1045 (28000): Access denied for user Verkeerd wachtwoord Let op: tussen -p en je wachtwoord hoort geen spatie
ERROR 1049 (42000): Unknown database 'trainforge' De database bestaat niet CREATE DATABASE trainforge;
ERROR 1146 (42S02): Table doesn't exist Je zit in de goede database maar de tabel ontbreekt USE trainforge; en daarna je CREATE TABLE
ERROR 1005 ... errno 150 Je foreign key kan niet gelegd worden De tabel waarnaar je verwijst moet er eerst zijn, en beide kolommen moeten INT zijn
ERROR 1062 (23000): Duplicate entry Je vult een id in dat al bestaat Laat id weg bij je INSERT, de database deelt hem zelf uit
Je ziet alleen -> en niets gebeurt Puntkomma vergeten Typ ; en druk op enter

Het werkt, maar het antwoord is fout

Dit zijn de vervelendste, want je krijgt geen foutmelding. Je API zegt netjes 200.

Wat je ziet Oorzaak
200 met een lege lijst terwijl er rijen in je tabel staan Je gebruikt ExecuteNonQueryAsync() op een SELECT. Die leest niets
200 met { "bericht": "Resultaat opgeslagen." } bij een GET Je return staat er nog van de POST
200 terwijl het id niet bestaat Je controleert niet of de reader iets vond, of niet hoeveel rijen er geraakt zijn
Je krijgt alle rijen in plaats van vijf LIMIT 5 ontbreekt
De langzaamste tijd staat bovenaan DESC in plaats van ASC
Alle rijen zijn verdwenen na een DELETE Je WHERE ontbrak in de query
404 terwijl het id wel bestaat Je bent AddWithValue("@id", id) vergeten
Lege lijst terwijl de oefening bestaat Een hoofdletter of spatie verschil in je testdata

Statuscodes in Bruno

Code Betekenis Eerste ding om te controleren
200 gelukt Staat er ook echt data in het antwoord?
201 gemaakt Zelfde als 200, maar netter bij een POST
400 je verzoek klopt niet Je JSON heeft een komma te veel of een aanhalingsteken te weinig
404 niet gevonden Typefout in je adres, of het ding bestaat echt niet
405 verkeerd werkwoord Je staat in Bruno op GET terwijl je endpoint een DELETE is
415 verkeerd formaat Zet in Bruno het tabblad Body op JSON
500 jouw code is gecrasht Kijk in de terminal, daar staat de echte melding

Krijg je helemaal geen code? Dan is er niemand om te antwoorden. Je API draait niet, of je poortnummer klopt niet. Controleer of er Now listening on: http://localhost:5050 in je terminal staat.