使用以下控制器方法建立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工具提供以下功能: 所有这些,控制器中的stuff变量都有2个null属性。
任何对此的帮助都会非常感激,在最后一天左右拉出我的头发或者试图解决这个问题,将[FromBody]
标签从参数中删除,并且仍然是空。
答案 0 :(得分:1)
您传递了错误的JSON。
更改此行:
body: JSON.stringify({ stuff: { filters: filters, orders : orders } })
到这一个:
body: JSON.stringify( { filters: filters, orders : orders } )