【问题标题】:sending multiple objects to back-end post method using angular 4 http services使用 Angular 4 http 服务将多个对象发送到后端 post 方法
【发布时间】:2018-03-09 18:04:40
【问题描述】:

您好,我正在尝试使用 http post 方法将两个对象发送到后端

我的环境是angular4、typecirpt、asp.net MVC 5

但它抛出 500 内部服务器错误

如果我将单个对象传递给后端,则使用相同的方法,我的后端方法将被调用

这里是传递单个对象的代码

clientSidePostCall(Results:any,Details:any):Observable<any>{
   return this._http.post(Global.ENDPOINT +'BackendMethod/',Results)
            .map((response: Response) => <any>response.json())
            .catch((err:any) => { throw err; });
        }

如果我将 Results 对象发送到 BackendMethod(如果它需要单个参数)

,则上述代码工作正常

如果我在需要两个对象时将多个对象发送到 backendMethod,则相同的代码将不起作用。

   clientSidePostCall(Results:any,Details:any):Observable<any>{
       return this._http.post(Global.ENDPOINT +'BackendMethod/',Results,Details)
                .map((response: Response) => <any>response.json())
                .catch((err:any) => { throw err; });
            }

上面的代码不工作并抛出 500 internal server error

这是我的后端方法签名

 [HttpPost]
        public HttpResponseMessage BackendMethod([FromBody] resultsType Results, [FromBody] detailsType Details)

请帮帮我

我还有另一个疑问,我们可以在 angular 4 和 typescript 中传递 http.get 中的对象

【问题讨论】:

    标签: asp.net-mvc angular typescript http


    【解决方案1】:

    我不知道 asp.net 是如何工作的,但是 HttpClient.post 的第三个参数不适用于另一个帖子正文。事实上,一个 post 请求不能有两个 body。如果您的后端需要一个数组,请执行以下操作:

    this._http.post(url, [Results, Details])
    

    【讨论】:

    • 服务器会以正确的形式反序列化它吗?我怀疑
    • 取决于服务器。如果它是 JSON 解码主体并期望它是一个数组,是的。
    • 即。默认情况下,您传递给 post() 的任何内容都会被 JSON 编码并作为原始帖子正文发送。
    • 在 JSON 中它不能.. 一个数组是 [1, 2, { "foo": 12} ] 而对象是 {"a":1, "foo":"foo"}跨度>
    • 如前所述,我对 asp.net 的了解还不够,无法从代码 sn-p 中看出服务器期望什么,一个数组还是几个嵌套对象?
    【解决方案2】:

    在您的角度代码中,将结果和详细信息设置为更大对象的属性...所以发送这个对象:

    const myPostBody = { resultsType: Results, detailsType: Details }
    
    return this._http.post(Global.ENDPOINT +'BackendMethod', myPostBody)
                    .map((response: Response) => <any>response.json())
                    .catch((err:any) => { throw err; });
                }
    

    还要确保您的 API 类类型结果与您发送的类结果实际匹配

    【讨论】:

    • 我已经关注了,谢谢凯文
    【解决方案3】:

    HTTP Post 需要在父实体中包装子实体。子实体通常是业务实体。 在接收服务端,您将使用实体名称作为属性来接收各个项目。所有这些都假设您的实体本身是可序列化的。

    【讨论】:

      猜你喜欢
      • 2016-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      相关资源
      最近更新 更多