WebAPI:使用POST AJAX请求(axios)传递对象数组

时间:2019-02-05 18:21:55

标签: c# ajax asp.net-web-api axios

我正在尝试将数据传递到WebAPI路由,但未绑定-收到的参数始终为null。

在前端,我有一系列作业,类似于:

const jobs = [{Id: 1, Name: 'First'}, {Id: 2, Name: 'Second'}] 

我正在尝试使用发布请求将此数组传递给后端:

axios.post('jobs/insert', jobs, {
  headers: { 'Content-Type': 'application/json' }
})

这是原始请求:

POST /api/job/insert HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 51
Accept: application/json
Origin: http://localhost:8080
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
DNT: 1
Content-Type: application/json
Referer: http://localhost:8080/
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9,fr;q=0.

[{"Id":1,"Name":"First"},{"Id":2,"Name":"Second"}] 

在后端,我有这种方法:

[HttpPost]
[Route("insert")]
public IActionResult InsertJob([FromBody] List<dto.Job> jobs)
{
    return this.Ok(new { data = jobs });
}

该方法已正确调用,但 jobs 未正确绑定-它始终为null。

这是dto.Job模型:

namespace Scheduling.Models.DTO
{   
    public class Job
    {
        public int Id { get; set; }

        public string Name { get; set; }
    }
}

我尝试使用List<dto.Job>dto.Job[]IEnumerable<dto.Job>。我还尝试删除[FromBody],或发布对象{'': jobs}而不是数组(如其他网站上所建议的那样)。似乎没有任何效果,由于某种原因接收到的数据始终为空。

我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

如果您查看请求正文,则该数组未经过json字符串化

[{"Id":1,"Name":"First"},{"Id":2,"Name":"Second"}] 

应该是

"[{"Id":1,"Name":"First"},{"Id":2,"Name":"Second"}]"

在axios请求中,在发送对象之前尝试对其进行字符串化

axios.post('jobs/insert', JSON.stringify(jobs), {
  headers: { 'Content-Type': 'application/json' }
})