TRESTRequest добавляет завершающий sla sh, если последний параметр запроса пуст? - PullRequest
1 голос
/ 05 мая 2020

Я использую компонент Delphi TRESTRequest для выполнения запроса POST, и у меня есть некоторые параметры запроса в URL-адресе. Свойство Resource для TRESTRequest выглядит так:

index. php? Operation = {operation} & id = {id} & test = {test}

Параметры operation, id и test - это pkURLSEGMENT.

Свойство BaseURL для TRESTClient имеет форму https://example.com/myapi/v1/.

Все работает нормально, если я установил test на 1 или какое-то другое значение, запрошенный URL-адрес выглядит так, как ожидалось:

index. php? operation = foo & id = bar & test = 1

Но если я установил его на пустой строка, фактический запрашиваемый URL-адрес становится

index. php? operation = foo & id = bar & test = /

Почему sla sh добавляются, и как я могу это предотвратить? Прямо сейчас я прибегаю к использованию 0 вместо пустого значения, но для справок в будущем было бы хорошо знать, как использовать и пустое значение.

1 Ответ

1 голос
/ 05 мая 2020

Хотя нет строгого определения для термина сегмент URL , и из его имени можно сделать вывод, что он относится только к любой части URL, обычно он представляет собой сегмент пути URL и поэтому должен называться path сегмент .

Например, определение UrlSegment в Angular маршрутизаторе равно

A UrlSegment является частью URL-адреса между две косые черты. Он содержит путь и параметры матрицы, связанные с сегментом.

TCustomRESTRequest.DoApplyURLSegments отвечает за наблюдаемое вами поведение. Проверьте его реализацию.

Но сегменты в вашем коде представляют значения в строке запроса. pkQUERY был разработан для таких параметров. pkQUERY был представлен в Delphi 10.3 Rio . Если вы используете старую версию, вам придется прибегнуть к обходному пути:

  • Использовать фиктивное значение (текущее обходное решение).
  • Измените порядок параметров или добавьте фиктивное значение параметр в конце, чтобы последний параметр никогда не был пустым.
  • Используйте вместо него pkGETorPOST, но это будет работать только с методом GET.
  • Управляйте строкой запроса самостоятельно.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...