Символ «+» в параметрах URL-адреса HTTP заменен на «% 2B» (Angular 14)
Недавно я обновил угловую версию приложения 13 до версии 14. Я вижу, что некоторые вызовы API терпят неудачу, которые отлично работали в angular 13.
Вызов API (Angular 13)
domain.com/api/v2/todos/count?filter=created+ge+1997-06-21
Вызов API (Angular 14)
domain.com/api/v2/todos/count?filter=created%2Bge%2B1997-06-21
Символ «+» заменен на «% 2B», что вызывает проблему. Есть ли способ отправить + в URL как есть?
компонент.ts
const filter = "created+ge+1997-06-21"
service.todosCount(filter).subscribe()
сервис.тс
todosCount(params) {
return this.http.get<TodosCount[]>(
'/afes_case_api/v1/cases/state_count',{ params }
)
}
1 ответ
Я думал о вашем вопросе и пытался узнать, что я могу об этом.
Я считаю, что проблема, с которой вы столкнулись, связана с кодировкой URL. Это просто означает, что определенные символы/символы ограничены или «зарезервированы». Источник: [0]
«Что делает кодирование URL? Кодирование URL (процентное кодирование)
Кодирование URL преобразует символы в формат, который можно передавать через Интернет. URL-адреса можно отправлять только через Интернет с использованием набора символов ASCII. Поскольку URL-адреса часто содержат символы, не входящие в набор ASCII, URL-адрес необходимо преобразовать в допустимый формат ASCII». Источник: [1]
Ниже приведен список некоторых полезных источников, если вы хотите продолжить чтение.
Источник[0]: https://www.urlencoder.org/
Источник[1]: https://www.url-encode-decode.com/
Источник[2]: https://www.w3schools.com/tags/ref_urlencode.asp
Мое предлагаемое решение: используйте незарезервированные символы для разделения информации в строке. Я считаю, что следующие символы будут работать без кодирования:
-
- (минус)
- _ (нижнее подчеркивание)
- . (период)
- ~ (тильда)
Альтернатива: я просмотрел комментарий rickz и думаю, что он может быть более полезным, если вы хотите сохранить символ «+».