【问题标题】:Do I have to post objects seperately with Angular 7 and Asp.net?我是否必须使用 Angular 7 和 Asp.net 分别发布对象?
【发布时间】:2019-11-22 09:48:58
【问题描述】:

我正在尝试将对象发布到我的服务器,但收到的对象的值为 null。

后端代码:

// Signature 

public IActionResult Save(string num, string pat, string token, [FromBody]DataCl data, [FromBody]List<items> listItems)

// EDIT: Added class
    public class Object
    {
        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 正在接收正确的数据,但代表 body 的数据没有接收任何数据 - 它们为空。

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

【问题讨论】:

    标签: asp.net angular http-post


    【解决方案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()
    

    【讨论】:

    • 所以前端代码是正确的,因为{data, list} &lt;=&gt; {data: {}, list: [{}] 。那么一个对象和一组对象,这是一个正确的发布形式吗?
    • 当然。但是您需要对后端类进行适当的更改以接受数据属性和列表。
    • 也许你可以再次帮助我:我有类测试:class Test { public data Data; public List&lt;Items&gt; ListItems;}?签名也改成了[FromBody]Test,但是值还是null但是为什么呢?
    • 你在asp.net中的签名是什么?您可以编辑问题以添加更改后的代码吗?
    • 我做到了。如果您仔细查看,我将不胜感激。
    猜你喜欢
    • 2019-01-31
    • 1970-01-01
    • 2022-01-06
    • 2015-09-14
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多