Ну, я сдался и решил с помощью обработчика ошибок, как было предложено (спасибо Кристофер). Мне нужен был http-клиент, который просто передавал бы мне ответ http независимо от статуса и выдавал ошибку только в том случае, если ответ не возвращался (например, несуществующий домен). Angular HttpClient не будет этого делать. Там может быть другая клиентская библиотека http, которая будет, но жизнь слишком коротка.
Мне нужен только статус HTTP и тело из ответа, поэтому я создал этот обработчик ошибок:
private handleError(error: HttpErrorResponse) {
if (error.status == 0)
return of({ status: 600, body: "Unexpected error. If this problem persists, please contact ..." })
else
return of({ status: error.status, body: error.error });
}
Тогда мои методы вызова API выглядят следующим образом:
changePassword(requestData: PUMRequestData): Observable<HttpResponse<string>> {
return this.http.put<any>("http:// ... /API/ChangePassword", requestData, this.httpOptions)
.pipe(catchError(err => this.handleError(err)));
}
Теперь, независимо от того, получает ли подписчик ответ либо от успешного вызова HTTP Status 200, либо от обработчика ошибок, он будет содержать как «status», так и «body». ». Обратите внимание, что если нет ответа HTTP, тогда я устанавливаю фиктивный HTTP Status 600, и в этом случае я должен предоставить недостающее сообщение об ошибке, которое было бы в теле. Также мне пришлось поменять тип данных пут из строки HttpResponse на любой.