为了账号安全,请及时绑定邮箱和手机立即绑定

使用 XmlHttpRequest 中的 FormData 将数据发布到

使用 XmlHttpRequest 中的 FormData 将数据发布到

素胚勾勒不出你 2021-11-12 17:48:21
我有一个带有此操作的 ASP.Net Core Web API:    // 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; }    }我从 javascript SPA 调用操作,使用 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 结果中显示以下错误:这似乎是正确的。那么我使用 FormData 有什么问题?
查看完整描述

1 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

如果你想用 发布数据 FormData,那么你不应该设置Content-Type为application/json.Besides,在你的操作参数上使用[FromForm]而不是[FromBody]。


1.在js代码中删除以下行


req.setRequestHeader("Content-Type", "application/json");

2.使用【FromForm】


[HttpPost]

 public void Post([FromForm] Tache tache)

结果如下:


idTache:11 dateCreation:2019-10-08 dateEditorial:2019-10-22 优先级:1 已完成:在描述:测试


由于您将数据作为模型 Type 接收Tache,因此您需要传递一个名为id而不是idTache显示在日志结果中的属性。


您没有显示您的视图代码,我建议您使用name="id"该输入文本框。


在我的情况下,正确的日志结果有一个__RequestVerificationToken:,如果您使用它,它也是expeted <form id="formEdit">:


id: 11

dateCreation: 2019-10-08

dateEcheance: 2019-10-22

priorite: 1

terminee: on

description: essai

__RequestVerificationToken:xxxxxxxx


查看完整回答
反对 回复 2021-11-12
  • 1 回答
  • 0 关注
  • 228 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信