我必须分别用Angular 7和Asp.net发布对象吗?

问题描述 投票:1回答:1

我正在尝试将对象发布到我的服务器,但是接收到的对象的值为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。

只有一个对象可以正常工作-收到了正确的对象,但是只有两个对象不再起作用,为什么?前端代码中有东西吗?还是后端?

asp.net angular http-post
1个回答
1
投票

检查以下文章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()
© www.soinside.com 2019 - 2024. All rights reserved.