在我的应用程序中,我有一个Web API控制器,应该添加一个类型" Source"到我的数据库,然后返回创建的源。 Source包含" SourceFields"的列表/集合,它们本身由许多字段组成。 Source还继承自我用于更改跟踪的基础实体,其中包含创建日期,修改日期等字段。
使用Postman,我已经测试了我的API并验证了它在发布Source时正确返回,并且它包含了所有创建的对象。但是,当我使用带有RxJS Observables的Angular 2 HTTP进行发布时,返回的值已经删除了所有基本实体字段以及源字段。我在Angular 2中使用Source类来进行操作,但我不会在通话中的任何地方使用它,所以我不认为它被强制转换或强制转换?我正确地返回源响应(即包括基本实体属性)的唯一方法是在API POST方法中将sourcefields设置为null。
此数据服务与简单实体完美配合。例如,我有一个客户端实体,它不包含像sourcefields这样的集合,并且它返回基本实体字段就好了。
有什么想法吗?
我的API POST方法:
// POST api/Sources
[HttpPost]
public IActionResult Post([FromBody]Source source)
{
if (source == null)
{
return BadRequest();
}
dbContext.Sources.Add(source);
dbContext.SaveChanges();
//Hack to get source to return properly
//source.SourceFields = null;
return CreatedAtRoute("GetSource", new { id = source.SourceId }, source);
}
Angular 2 Dataservice方法:
public Add (action: string, itemToAdd: any): Observable<any> {
var toAdd = JSON.stringify(itemToAdd);
return this._http.post(this.actionUrl + action, toAdd, { headers: this.headers })
.map(res => res.json())
.catch((error: any) => Observable.throw(error.json().error || 'Server Error'));
}
我订阅数据服务的地方:
this.addEditSource.sourceFields = this.sourceFields;
this._dataService.Add('Sources', this.addEditSource).subscribe(source => {
this.sources.push(source)
},
error => console.log(error));
如果有人想查看我的实体模型或其他任何内容,我可以添加它们。