克隆HTTPRequest时,服务端点参数似乎获取encodeURI?

2024-09-29 21:38:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在测试我创建的函数调用

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

看起来不错。它说,当使用Connexion或Python-Swagger时,项目数组是以逗号分隔的。在查看示例时,它正在对属性名称进行uri编码。这将逗号转换为:%2C

我注意到的问题是,在执行此操作时,它看起来是正确的,但在监视网络请求时,它实际上执行了:%252C

我在url上运行了encodeURI以查看它的外观,瞧,我想我找到了问题所在。我考虑的唯一问题可能是我的这个请求的拦截器,除非get-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.

我不想假设招摇/连接的定义是错误的。但是,因为我可以卷曲请求,所以我可以确定它是否按照定义工作,并相信问题与Angular Typescript中处理的底层HttpRequest有关


Tags: ofnamerefid编码getnamesrequest

热门问题