Как обработать редирект 302 на страницу, которая возвращает текст / html вместо application / json? - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь использовать Angular HttpClient для звонков в службу REST.

Однако между моим клиентом и бэкэндом существует слой аутентификации, который проверяет все запросы на наличие действительного токена аутентификации. Если этот токен не существует, прокси-сервер выдаст ответ 302, перенаправив мой запрос на страницу входа text/html.

Я понимаю, что это странно, но у меня нет контроля над этим уровнем и его функционированием. Я просто пытаюсь использовать интерфейс HttpInterceptor для просмотра содержимого полезной нагрузки ответа и просмотра полезной нагрузки для определенных ключевых слов. что я уверен, что будет в этом text/html ответе.

Я попробовал следующее, чтобы посмотреть, смогу ли я увидеть ответ:

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(request)
        .pipe(
            tap(console.log)
        );
}

но я всегда представляю это как вывод:

{"type": 0}

Я смог просмотреть ответ, если я просто добавлю { responseType: 'text' as 'json' } к своим HttpClient вызовам, т. Е .:

return this.httpClient.get<string>(
    'http://my/service',
    { responseType: 'text' as 'json' }
);

и вызовите .pipe(map(s => JSON.parse(s))) в ответе для создания объекта из строки, но это, очевидно, неуклюже, склонно к проблемам, и много работы, чтобы добавить это ко всем случаям использования HttpClient.

Мне кажется, что Angular автоматически отбрасывает / заменяет полезную нагрузку, если полезная нагрузка не является допустимой JSON, прежде чем я смогу просмотреть ее с помощью моего перехватчика, если я не скажу прямо, что моя полезная нагрузка на самом деле не является JSON. Есть ли способ для меня, чтобы проверить мою полезную нагрузку в перехватчик без необходимости делать это?

...