Я тестировал созданный мной вызов функции.
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.