Javascript将POST JSON提取到WebAPI2 C#

时间:2017-08-08 08:36:12

标签: javascript c# json

使用以下控制器方法建立ASP.Net Core完整框架WebApi控制器。

[HttpPost("{id}/json")]
public async Task<ILibraryModel> PostFromBody(int id, [FromBody]LibraryFilterOrder stuff, int pageSize, int pageNumber = 1)
{
    return await DoStuff(id, stuff, pageSize, pageNumber);
}

它采用了LibraryFilterOrder的模型,具有以下定义。

public class LibraryFilterOrder
{
    public List<ContainerView.ContainerFilterType> Filters { get; set; }
    public List<ContainerView.ContainerOrderType> Orders { get; set; }
}

public class ContainerFilterType
{
   public string ColumnPrefix { get; set; }
   public string ColumnName { get; set; }
   public string FilterValue { get; set; }
}

public class ContainerOrderType
{
   public string ColumnPrefix { get; set; }
   public string ColumnName { get; set; }    
   public bool SortAscending { get; set; }
   public int SequenceId { get; set; }
}

使用了使用Typescript的Javascript Fetch API

fetch(`/api/Library/${pageIndex}/json?pageSize=${pageSize}&pageNumber=${pageNumber}`, {
                    method: "POST",
                    headers: {                        
                        'Content-Type': 'application/json; charset=utf-8'
                    },
                    body: JSON.stringify({ stuff: { filters: filters, orders : orders } })
                })
                .then(response => response.json() as Promise<LibraryModel>)
                .then(data => {
                   //DO stuff
                });

Chrome Dev工具提供以下功能: enter image description here 所有这些,控制器中的stuff变量都有2个null属性。

任何对此的帮助都会非常感激,在最后一天左右拉出我的头发或者试图解决这个问题,将[FromBody]标签从参数中删除,并且仍然是空。

1 个答案:

答案 0 :(得分:1)

您传递了错误的JSON。

更改此行:

body: JSON.stringify({ stuff: { filters: filters, orders : orders } })

到这一个:

body: JSON.stringify( { filters: filters, orders : orders } )