У меня есть веб-API ASP.Net Core с этим действием:
// POST api/TodoList
[HttpPost]
public void Post([FromBody] Tache tache)
{
TodoListContext.AjouterTache(tache);
}
Вот код объекта Tache:
public class Tache
{
public int Id { get; set; }
[DataType(DataType.MultilineText)]
[Required, MaxLength(250)]
public string Description { get; set; }
[DataType(DataType.Date)]
public DateTime DateCreation { get; set; }
[DataType(DataType.Date)]
public DateTime DateEcheance { get; set; }
public int Priorite { get; set; }
public bool Terminee { get; set; }
}
Я вызываю действие из javascriptSPA, с XHR, подобным этому:
function ajouterTache() {
// Construit un objet Tâche à partir des valeurs saisies
let tache = {};
tache.id = document.getElementById("idTache").value;
tache.dateCreation = document.getElementById("dateCreation").value;
tache.dateEcheance = document.getElementById("dateEcheance").value;
tache.priorite = document.getElementById("priorite").value;
tache.terminee = document.getElementById("terminee").checked;
tache.description = document.getElementById("description").value;
console.log(tache);
// Envoie la tâche à l'API
const req = new XMLHttpRequest();
req.onload = function () {
...
};
req.open('POST', uri, true);
req.setRequestHeader("Content-Type", "application/json");
req.send(JSON.stringify(tache));
}
Приведенный выше код работает нормально, но этот код не работает:
function ajouterTache() {
data = new FormData(document.getElementById("formEdit"));
// Envoie la tâche à l'API
const req = new XMLHttpRequest();
req.onload = function () {
...
};
req.open('POST', uri, true);
req.setRequestHeader("Content-Type", "application/json");
req.send(data);
}
Каждое поле формы имеет правильное имя, включено исодержит верный ввод.
Но я всегда получаю ответ «400: неверный запрос». Инструменты отладки Firefox показывают следующую ошибку в результате XHR:
Входная строка '----------------------------- 18691991225667 'не является допустимым числом. Путь '', строка 1, позиция 43. title: Произошла одна или несколько ошибок проверки
Я добавил этот код перед отправкой xhr для просмотра содержимого объекта данных:
let formData = new FormData(document.getElementById("formEdit"));
for (let pair of formData.entries()) {
console.log(pair[0] + ': ' + pair[1] + ", " + typeof pair[1]);
}
Вот результат:
idTache: 11
dateCreation: 2019-10-08
dateEcheance: 2019-10-22
priorite: 1
terminee: on
description: essai
Вроде бы правильно. Так что же не так с моим использованием FormData?