可观察订阅中的Angular 2丢失数据

时间:2016-10-12 16:57:16

标签: entity-framework angular asp.net-core angular2-http asp.net-core-webapi

在我的应用程序中,我有一个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));

如果有人想查看我的实体模型或其他任何内容,我可以添加它们。

0 个答案:

没有答案