The JSON value could not be converted to System.Boolean
Hej allesammans!
Jag sitter med en liten simpel webbapplikation där jag har problem med att posta ett nytt objekt till min databas.
Ett av målen med projektet är att se hur långt man kan komma med så simpel "teknik" som möjligt, så frontenden är skriven i HTML, CSS och JS/AJAX. Backenden är ett webapi i C# som går mot MongoDb Atlas.
Jag har inte kodat mycket alls i JS, så jag har sökt massvis men inte lyckats få det att funka.
Att skapa ett nytt objekt, i detta fall en motorcykel, går bra tills dess att jag lägger in en boolean, isActive. Tar jag bort den ur formuläret skapas motorcykeln med isActive = false per standard.
HTML-formuläret (kraftigt nedkortad för läsbarhet):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<form id="createForm" method="post" enctype="application/json"></form>
<table id="createVehicleTable">
<tr>
<td>
<label for="isActive">For sale:</label><br />
<input
type="radio"
id="yes"
name="isActive"
value="yes"
form="createForm"
/>
<label for="yes">Yes</label><br />
<input
type="radio"
id="no"
name="isActive"
value="no"
form="createForm"
/>
<label for="no">No</label><br />
</td>
</tr>
<tr>
<td>
<input type="submit" value="Create Vehicle" form="createForm" />
</td>
</tr>
</table>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min..."></script>
<script
src="./scripts/api-post-new.js"
language="JavaScript"
type="text/javascript"
></script>
</body>
</html>
Javascriptet:
const api_url = "http://mittFinaApi/api/motorcycles/create";
const serialize_form = (form) =>
JSON.stringify(
Array.from(new FormData(form).entries()).reduce(
(m, [key, value]) => Object.assign(m, { [key]: value }),
{}
)
);
$("#createForm").on("submit", function (event) {
event.preventDefault();
const json = serialize_form(this);
console.log(json);
$.ajax({
type: "POST",
url: api_url,
data: json,
contentType: "application/json",
success: function (result) {
console.log(result);
document.getElementById("createForm").reset();
alert("Vehicle saved successfully.");
},
error: function (result, status) {
console.log(result);
alert("Something went wrong when saving vehicle.");
},
});
});
Felmeddelandet jag får är: The JSON value could not be converted to System.Boolean. Path: $.isActive | LineNumber: 0 | BytePositionInLine: 2 och kikar man i console så ser man att det är en string = "true".
Backend ser ut såhär:
Endpoint:
[HttpPost, Route("create")]
[ProducesResponseType(typeof(int), 200)]
public async Task<IActionResult> Post([FromBody] Motorcycles newMotorcycles)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
await _motorcyclesService.CreateAsync(newMotorcycles);
return CreatedAtAction(nameof(GetAll), new { id = newMotorcycles.Id }, newMotorcycles);
}
Service:
public async Task CreateAsync(Motorcycles newMotorcycle) =>
await _motorcycleCollection.InsertOneAsync(newMotorcycle);
Jag har lagt ungefär 10h på att lösa detta, så nu vänder jag mig hit för hjälp och råd.
Hur löser jag mitt problem?
Är min function för komplex?
Vad kan göras bättre?
Tacksam för all hjälp.
» AMD Ryzen 5 2600X » 16 Gb DDR4 » ASUS GTX 1060 6 Gb OC » 1 Tb M.2 PCIe NVME
Vänligen citera om du pratar med mig