我正在尝试将对象发布到我的服务器,但是接收到的对象的值为null。
后端代码:
// Signature
public IActionResult Save(string num, string pat, string token, [FromBody]DataCl data, [FromBody]List<items> listItems)
// EDIT: Added class
public class Test
{
public List<items> listItems { get; set; }
public DataCl data { get; set; }
}
// So new signature
public IActionResult Save(string num, string pat, string token, [FromBody]Test test)
// The value is still null
前端代码:
post(num, data, list)
return this.http.post<any>(url,{data, list}, httpOptions).subscribe()
所以参数num,pat和token正在接收正确的数据,但是表示正文的数据未接收任何数据-它们为null。
只有一个对象可以正常工作-收到了正确的对象,但是只有两个对象不再起作用,为什么?前端代码中有东西吗?还是后端?
检查以下文章here
不要将[FromBody]应用于每种动作方法的多个参数。ASP.NET Core运行时委派了阅读请求流到输入格式化程序。一旦请求流是读取,不再可以再次读取以绑定其他[FromBody]参数。
您不能具有两个FromBody
属性。 from正文仅读取一次。
{data, list}
在javascript中仍然是一个对象。除非它们是嵌入式的,否则无法在体内发布多个对象。
{
object1: {}
object2: {}
}
并且在您的后端代码中:
class WrapperObjectResponse {
public Object1 = ...
public Object2 = ...
}
在您的新签名中,尝试以下操作:
[Route("save/{num}/{pat}/{token}")]
public IActionResult Save(string num, string pat, string token, [FromBody]Test test)
并这样打电话:
return this.http.post<any>(url + '/' + num + '/' + pat + '/' + token + '/',{data: {}, list = []}, httpOptions).subscribe()