Как автоматически определить тип контента в Angular - PullRequest
1 голос
/ 16 апреля 2020

В моем приложении Angular 9 я пытаюсь автоматически установить тип содержимого для каждого отдельного HTTP-запроса, который я выполняю.

В Angular do c Я нашел этот detectContentTypeHeader метод, но, кажется, не работает хорошо. В моем случае, например, для этого типа тела:

{"username":"admin","password":"pwd","tenant":"12345"}

обнаруживает text/plain вместо application/json, но тело правильное JSON, поэтому я ошибаюсь что-то? Есть ли способ сделать это автоматически, или мне нужно установить его для каждого запроса? (Я уже использую перехватчик)

multipart / form-data

1 Ответ

0 голосов
/ 16 апреля 2020

Если вы передадите object вместо string в качестве тела запроса, он обнаружит его как application/json.

Причина, по которой он обнаруживает строку как text/plain, записана в исходный код

Технически строки могут быть формой JSON данных, но достаточно безопасно предположить, что они являются простыми строками

Если по какой-то причине вы все еще хотите определить строку как допустимую JSON, вы можете сделать следующее:

let contentType = req.detectContentTypeHeader();

if (typeof req.body === 'string') {
  try {
    JSON.parse(req.body);
    contentType = 'application/json';
  } catch {}
}

req = req.clone({ headers: req.headers.set('content-type', contentType) });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...