我创建了一个带有Angular 7前端的 ASP.NET Core Web Api后端。API 中的一种方法可以将对象或数组返回到 Angular 服务。如何根据返回的数据类型路由到特定的可观察对象?我是Angular的菜鸟,所以任何善意的帮助将不胜感激。
Angular service call to Api:
getLinksFromSitus(situs: any) {
this.http.post(this.baseUrl + 'getLinksFromSitus', situs).subscribe(data =>
this.apiData.next(data)
);
}
Portion of Web Api that returns array if more than one APN present:
// if more than one item in list, get status information for each and return list to user to select appropriate apn
if (propApn.Count > 1)
{
return Ok(propApn);
}
Portion of same method to return object if only one value for APN:
var resultsModel = new Results
{
ArcGisLink = arcGisLink,
HistInfoLink = histInfoLink,
PropInfoLink = propInfoLink
};
return Ok(resultsModel);
你不能这样做。Typescript 只能在构建时基于静态分析键入内容,您的描述需要 Typescript 在构建时知道您的 API 调用的结果,但它不会这样做。
您能做的最好的事情就是指示您的 API 调用可以返回您的两个:
public myApiFunc(req: MyRequestModel): Observable<any>
但这仍然需要您确定在运行时返回的类型。
我能够找到一个有效的解决方案......
getLinksFromSitus(situs: any) {
this.http.post(this.baseUrl + 'getLinksFromSitus', situs).subscribe(data => {
if (data.hasOwnProperty('arcGisLink')) {
this.apiData.next(data);
} else {
let vals = [];
vals = this.apiPropApn.getValue();
const item = vals.concat(data);
this.apiPropApn.next(item);
}
});
}
因此,在订阅 HttpResponse 后,我能够检查响应中的数据是否包含已知属性。如果它不包含已知属性,则它将数据连接到 BehaviorSubject 数组。它工作得很好。