Как направить возвращаемое значение API ASP.Net Core к соответствующей наблюдаемой в зависимости от типа возвращаемых данных - PullRequest
0 голосов
/ 29 мая 2019

Я создал серверную часть ASP.NET Core Web Api с интерфейсом Angular 7. Один из методов в 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);

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

Мне удалось найти решение, которое сработало ...

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. Работает отлично.

0 голосов
/ 31 мая 2019

Вы не можете сделать это.Typescript может печатать только те вещи, которые основаны на статическом анализе во время сборки, что, по вашему описанию, потребует, чтобы Typescript знал результат вашего вызова API во время сборки, а это не так.

Лучшее, что вы можете сделать, этоуказывая, что ваш вызов API может вернуть оба из них:

public myApiFunc(req: MyRequestModel): Observable<any>

Но для этого все равно потребуется выяснить, какой тип возвращен во время выполнения.

...