错误:“应用程序未读取整个请求主体就完成了” Angular / C#

时间:2019-03-15 13:13:16

标签: c# angular typescript angular-services angular-httpclient

我在Angular服务中发送string时出错。

使用Postman发送字符串时,我试图运行存储过程,并且一切正常。

邮递员: enter image description here enter image description here

但是,当我通过服务发送字符串时,它不起作用。

user.service.ts:

addUser(user: string): Observable<any> {
  return this.http.post<string>('/api/user/AddUser', user)
    .pipe(catchError(this.handleError));
}

控制台错误:

  

信息:Microsoft.AspNetCore.Hosting.Internal.WebHost 3         请求在11.3875ms 400 application / json中完成; charset = utf-8

     

信息:Microsoft.AspNetCore.Server.Kestrel [32]         连接ID“ 0HLL95U87FBQE”,请求ID“ 0HLL95U87FBQE:00000003”:应用程序已完成,未读取   整个请求正文。

浏览器错误:

enter image description here

所以我真的不知道API真正得到了什么,因为它期望的结果必须是字符串。

UserController C#:

[HttpPost]
public User AddUser([FromBody]string user)
{
  return objUser.AddUser(user);
}

如果您对我的问题有解决方案,我很感兴趣。 预先谢谢你。

编辑: 通过这样修改我的服务:

const httpOptions = {
  headers: new HttpHeaders({
    'Content-Type':  'application/json'
})

addUser(user: string): Observable<any> {
    return this.http.post<User>('/api/user/AddUser', user.toString(), httpOptions)
      .pipe(catchError(this.handleError));
}

我收到此新错误: 知道A是字符串中名字的第一个字母。

enter image description here

2 个答案:

答案 0 :(得分:3)

确保将http标头中的内容类型设置为与Postman中设置的相同,并实际发送JSON。另外,您还希望帖子返回一个用户对象,以便您的userservice.ts像这样:

addUser(user: string): Observable<any> {
  const httpOptions = {
    headers: new HttpHeaders({
      'Content-Type':  'application/json'
  })
  return this.http.post<user>('/api/user/AddUser', JSON.stringify(user), httpOptions)
    .pipe(catchError(this.handleError));
}

答案 1 :(得分:1)

我看不到任何会影响此错误的代码,唯一想到的是需要对字符串或JSON对象进行字符串化,这与邮递员有所不同。因此,最好在将请求主体传递给API之前先对其进行字符串化处理。

尝试一下:

addUser(user: string): Observable<any> {
  const httpOptions = {
    headers: new HttpHeaders({
      'Content-Type':  'application/json'
  })

  var userName = JSON.stringify(user);  // This

  return this.http.post<user>('/api/user/AddUser', userName, httpOptions)
    .pipe(catchError(this.handleError));
}