我正在从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'))
);
}
从我的客户端应用程序发送的对象正在使用驼峰式案例属性,而后端的模型正在使用pascal-case案例。在Postman中,这不会影响任何事情,但以防万一。
我真的很困惑为什么从邮递员那里打电话时它是有效的。但是从客户端进行的每次测试,我都会收到一个空对象。
编辑#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; }
}
预先感谢
答案 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'))
);
}
如果您还有任何问题,请告诉我