Параметр конечной точки службы, кажется, получает encodeURI, когда HTTPRequest является клонированным? - PullRequest
0 голосов
/ 01 октября 2019

Я тестировал созданный мной вызов функции.

names = name_list.join(",")
this._http.get(URL, {params:{ names }}).subscribe( results => information = results; );

, который выглядит правильно. В нем говорится, что при использовании Connexion или Python Swagger массив элементов разделяется запятой. При просмотре примера он делал кодирование URI для имен свойств. Это превратило запятую в:% 2C.

Проблема, которую я заметил, заключается в том, что при этом он выглядит правильно, но при мониторинге сетевых запросов он фактически выполняет:% 252C.

Я запустилencodeURI на URL, чтобы посмотреть, как это выглядит, и вот, думаю, я нашел проблему. Единственной проблемой, о которой я думаю, может быть мой перехватчик для этого запроса, если только getCat httpClient не выполняет это.

Это не работает как запятая, так как encodeURI оставил бы это в покое, но во-вторыхзакодированный с помощью encodeURIComponent, он закодирует его снова.

Этот перехватчик:

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
  let _customID = 42,
      _customToken = "HelloWorld";
  request = request.clone({
    setParams: {
     id : _customID,
     token: _customToken
    }
  });
  return next.handle(request)
}

Я проверил конечные точки с помощью curl, чтобы подтвердить, что тайно выполненный encodeURI является виновником и с соответствиемстроки, я думаю, что это так.

Во-первых, функция клона делает это? Если так, есть ли способ подавить это. Как мне обойти это?

Похоже, что свойство согласно swagger ищет% 2C между каждым элементом массива.

Используемый скрипт yaml выглядит примерно так:

/devices/list
  get:
    tags: [Devices]
    operationId: app.devices_list_get
    summary:Get a list of devices based on a list of names
    parameters:
       - $ref: '#/parameteres/id'
       - $ref: '#/parameteres/id'
       - $ref: '#/parameteres/names'
    responses:
      200:
        description: An array of devices.
        schema:
          - $ref: '#/definitions/Devices'
parameters:
  names:
    in: query
    name: names
    required: true
    type: array
    items:
      type: string
    description: a list of device names to look up.

Я не хотел предполагать, что определение Swagger / Connexion было неверным. Однако, поскольку я могу CURL запрос, я могу определить, что он работает так, как определено, и полагать, что проблема связана с базовым HttpRequest, обработанным в Angular Typescript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...