Angular 8 HttpClient: невозможно обработать ответ сервера text / csv - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть конечная точка, которая возвращает набор данных CSV, который будет сохранен с использованием saveas и Blob AngularJS Интерфейс работает нормально, в то время как Angular 8 борется. Вот моя Angular 8 реализация

 const headers = new HttpHeaders({
            Accept: 'text/csv',
        });
        const options = { headers };
        this.httpClient
            .post<ExportCsvSettingsViewDto>(this.appConfigService.buildApiUrl(this.loadPath(batchId)), csvDto, options)
            .subscribe((fileResult: any) => {
                const file = new Blob([fileResult], { type: 'text/csv' });
                saveAs(file, this.fileName + '.csv');
            });

Это приводит к HttpErrorResponse заявлению: Object {error: SyntaxError: Неожиданный токен. в JSON at positio…, текст: «1.112.373; en-US Дата Время UTC; Дата Местное время; Bat…»}

Я подозреваю, что это потому, что HttpClient обрабатывает ответ как JSON вместо "text/csv" Это были заголовки запроса:

Connection: keep-alive
Content-Length: 141
Pragma: no-cache
Cache-Control: no-cache
Accept: text/csv
Content-Type: application/json
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9

и заголовки ответа:

HTTP/1.1 200 OK
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Content-Type: text/csv
Expires: 0
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET
X-UA-Compatible: IE=edge
Content-Length: 191147

Я пытался явно установить "responseType" в заголовке запроса на "text/csv" но это просто невозможно. Есть идеи на этот счет?

1 Ответ

0 голосов
/ 27 февраля 2020

На случай, если кого-то волнует: Мое подозрение было правильным: ответ считался типа json. Настройка responseType='text' работала так:

  const options = { headers, responseType: 'text' as any };

Я считаю, что на самом деле это большая проблема

...