【问题标题】:Post HTTP array angular 7 and .NET core web api发布 HTTP 数组 Angular 7 和 .NET 核心 Web api
【发布时间】:2019-02-25 17:12:23
【问题描述】:

我已经编写了从 angular 7 到 asp.net core web API 的 Http 邮政编码。 我在下面附上了代码 sn-ps。我在 .net 核心 API 中得到一个空数组。 这是我在 Angular 7 中用 Component.ts 文件编写的代码

saveEducation(edu: Education[]) { const obj = new Education(this._http, 
this._deoServices);
obj.saveEducation(edu).pipe(takeUntil(this.destroy$)).subscribe((res) => 
{
 // this.eduData = res;
 });
}

这是用组件模型类编写的代码

saveEducation(edu: Education[])  {
return this._service.saveEducation('/api/Deo/SaveEducation', edu);
}

这是写在service.ts文件中的代码。

public saveEducation(api: string , model: Education[]): Observable<boolean> 
{
     return this._http.post<boolean>(api, {education: model.values}, {
        headers: new HttpHeaders({
         'Content-Type' : 'application/json'
       })
    });
}

这是接受数组的 Web API 代码。

public bool SaveEducation( dynamic[] edu)
{
     var obj = new Candidate_Educational_Info_Table(_context);
    return obj.SaveEducation(edu);
}

当我的数组为空时,请帮助我找出错误

Here is network tab results

Network tab second ss

Here is the image where i am getting null array

Here is Request Header screen shot

【问题讨论】:

  • 返回布尔值不是 JSON
  • 那我应该返回什么?如果数据发布成功,我将返回 true 或 false
  • 你为什么返回true或false?你的目标是什么?
  • 不是这样的目标。我可以删除布尔值,但我应该使用什么返回类型?
  • 我遇到的问题是错误是在我的 Angular 代码中还是在 Web api 代码中,因为当我从 Angular 调试和发布数据时,我在 Web api 中得到空数组

标签: c# angular asp.net-web-api asp.net-core asp.net-core-2.1


【解决方案1】:

{education: model.values} 替换为model.values

现在会是这个样子,

this._http.post<boolean>(api, model.values, {
    headers: new HttpHeaders({
    'Content-Type' : 'application/json'
    })
});

因为默认情况下,WebAPI 被配置为从正文中读取。或者,您可以在 WebAPI 中添加FromBody

public IActionResult SaveEducation([FromBody]Education[] edu)
{
     var obj = new Candidate_Educational_Info_Table(_context);
     var result = obj.SaveEducation(edu);
     return Ok(new { sucess = result });
}

【讨论】:

  • 这在我使用 [FromBody] 时不起作用我收到以下错误| POST localhost:50915/api/Deo/SaveEducation 400(错误请求)
  • 您是否也按照我上面的评论将 {education: model.values} 替换为 model.values。
  • 好吧..午饭后我再回复你..:)
  • 好的,我正在等待,因为我从 2 天开始就面临这个问题,但没有得到解决方案
  • 我在上面做了两个改变。也试试这些。首先,使用教育类型 DTO 而不是动态。其次,返回一些可以序列化为 JSON 的 C# 对象。不要在 API 方法上设置断点,看看你得到了什么。在发出请求以检查请求/响应标头和发布数据之前,还要保持 Chrome 的网络选项卡打开。
猜你喜欢
  • 1970-01-01
  • 2019-03-10
  • 1970-01-01
  • 2019-07-07
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
  • 2019-08-03
  • 2018-04-20
相关资源
最近更新 更多