| 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 |
| 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 |
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 |
| 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 |
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 |
| 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.