发布到Asp.Net Core收到空对象

时间:2019-05-21 17:37:44

标签: c# angular typescript asp.net-core

我正在从Angular 7应用程序向AspNet Core后端服务器发出POST请求。但是,在收到模型时,它为空。

我正在使用Postman进行测试,并且在使用Postman时可以使用。但是,从客户端应用发送邮件时,此功能不起作用。

这是我的控制器和控制器库:

public class BaseController : ControllerBase {
    public readonly ILogger _logger;
}
[Route("api/[controller]")]
public class ExperienceController : BaseController {
    [HttpPost, Route("Create")]
    public async Task<IActionResult> Create([FromBody] Experience experience){
      // code ommited
    }
}

这是我的service.ts代码

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

saveExperience(experience: Experience): Observable<Experience> {
  let url = `${this.baseUrl}/Experience/Create`;
  return this.http.post<Experience>(url, experience, httpOptions).pipe(
    tap((newExp: Experience) => this.log(`Created experience ${newExp}`)),
    catchError(this.handleError<Experience>('saveExperience'))
  );
}

Client Request

从我的客户端应用程序发送的对象正在使用驼峰式案例属性,而后端的模型正在使用pascal-case案例。在Postman中,这不会影响任何事情,但以防万一。 Postman request

我真的很困惑为什么从邮递员那里打电话时它是有效的。但是从客户端进行的每次测试,我都会收到一个空对象。

编辑#1 我从体验类中删除了所有字段,只使用了名称和描述,并且它起作用了,我只是发现如果我有一个复杂的属性,就会遇到这个问题。 我添加了一个默认的构造函数,初始化了属性,但仍然遇到相同的问题。 请注意,只有在使用Angular应用程序时我才会遇到此问题,如果我使用Postman可以正常工作

public class Experience : ExperienceBase {
    public string Name { get; set; }
    public string Description { get; set; }

    // this guy here is causing the issue
    public LocationDetails LocationDetails { get; set; } 

}

预先感谢

1 个答案:

答案 0 :(得分:0)

首先,您无需将HttpHeader设置为application/json,因此您可以删除HttpHeader,使您的代码像这样

saveExperience(experience: Experience): Observable<Experience> {
  let url = `${this.baseUrl}/Experience/Create`;
  return this.http.post<Experience>(url, experience).pipe(
    tap((newExp: Experience) => this.log(`Created experience ${newExp}`)),
    catchError(this.handleError<Experience>('saveExperience'))
  );
}

如果您还有任何问题,请告诉我