Символ «+» в параметрах 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

Источник[3]: https://help.marklogic.com/knowledgebase/article/View/using-url-encoding-to-handle-special-characters-in-a-document-uri .

Мое предлагаемое решение: используйте незарезервированные символы для разделения информации в строке. Я считаю, что следующие символы будут работать без кодирования:

    • (минус)
  1. _ (нижнее подчеркивание)
  2. . (период)
  3. ~ (тильда)

Альтернатива: я просмотрел комментарий rickz и думаю, что он может быть более полезным, если вы хотите сохранить символ «+».

Другие вопросы по тегам