Fehler-Beschreibung:
Bei der Eingabe von neuen Datensätzen über eine API in
ASP.Net Core MVC kann es vorkommen, dass die ID nicht wie vorgegeben um 1
erhöht wird,
sondern sich um 1000 erhöht.
Ursache:
Es kann sein, dass der ankommende
Datensatz eine bewertete ID aufweist. Beim Senden von neuen Datensätzen über
die HttpPost API Schnittstelle, darf
bei neuen datensätzen die ID nicht angegeben werden oder die ID wird definitiv
mit 0 vorgegeben.
Bei der Add-Methode zum Context
der SQL Server Datenbank wird die ID immer automatisch vergeben mit der nächst
höheren Nummer.
Alt:
Original Microsoft API
Template
//
POST-NEW: api/Projects *CREATE NEW
Recordset
[HttpPost]
public async Task<IActionResult> PostProject ([FromBody] Project project)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
//Check here ID
_context.tbl_Projects.Add(project);
await _context.SaveChangesAsync();
return CreatedAtAction("GetProject", new { id = project.ID_Project }, project);
}
|
Wenn man die ankommenden Daten prüft, stellt man fest,
dass ab und zu falsch ID Daten eingetragen sind. Diese muss man vor weiteren
Aktionen korrigieren.
Lösung:
Man muss den ankommenden Datensatz von Json prüfen auf
die ID. Es kann manchmal vorkommen, dass die ankommende ID mit einer -Zahl oder
ungleich 0 Null vergeben wurde.
Deshalb muss man vor der Erstellung eines neuen
Datensatzes den ankommenden Datensatz erst prüfen.
Zumindest mit der Prüfung, ob die ID=0 oder Null ist.
// POST-NEW: api/Projects *CREATE NEW Recordset
[HttpPost]
public async Task<IActionResult>
Create_NewProject([FromBody] Project project)
{
//------------<
Create_NewProject(Project) >------------
//public async Task<IActionResult>
PostProject([FromBody] Project project)
//*NEW Project
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (project.ID_Project!=0)
{
return BadRequest("ID not null or 0");
}
_context.tbl_Projects.Add(project);
await _context.SaveChangesAsync();
return CreatedAtAction("GetProject", new { id = project.ID_Project }, project);
//------------</
Create_NewProject(Project) >------------
}
|
Zum einfachen Test der Funktion sollte man mit
Test-Clients wie Postman den neuen API Datensatz mehrmals eingeben.