You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gatewayscript调用后端返回空响应 如何构造查询串获取代理详情

基于agent_id获取后端代理详情的查询串实现方案

原有代码问题梳理

  • 变量名大小写不统一:声明的变量是LegacyAgentNumber,拼接查询串时误用了小写开头的legacyAgentNumber,会触发未定义错误
  • 错误返回的JSON结构没有赋值给变量,属于语法错误,且变量插值方式错误
  • 响应赋值时变量名错误:定义的响应变量是sresponse,写入消息体时误用了不存在的response变量
  • 未对查询参数做URI编码,存在特殊字符导致请求失败的风险

正确查询串编写方案

情况1:后端直接通过路径参数agent_id匹配代理

不需要额外构造$filter查询串,直接将URI中的{agent_id}替换为实际的代理ID值即可,最终请求URI形式:
https://dev.blah.com:port/enterprise/dev/agencies/agency/books/book/agents/实际agent_id值/contact-information?requestId=_123&channelId=OL&channelName=OL

情况2:后端为OData规范接口,需要通过LegacyAgentNumber过滤查询

先修正变量名问题,对参数做URI编码后构造查询串,代码示例:

// 变量名大小写统一,对过滤值做URI编码避免特殊字符异常
var LegacyAgentNumber = apim.getvariable('request.parameters.LegacyAgentNumber');
var queryString = '$filter=contains(LegacyAgentNumber,\'' + encodeURIComponent(LegacyAgentNumber) + '\')';
apim.setvariable('queryString', queryString);

拼接后完整请求URI形式:
https://dev.blah.com:port/enterprise/dev/agencies/agency/books/book/agents/实际agent_id值/contact-information?$filter=contains(LegacyAgentNumber,%27你传入的LegacyAgentNumber值%27)&requestId=_123&channelId=OL&channelName=OL

完整修正后的Gatewayscript代码

// 引入依赖模块
var sm   = require('service-metadata.js');
var hm   = require('header-metadata.js');
var apim = require('./apim.custom.js'); 

// 读取请求参数
var LegacyAgentNumber = apim.getvariable('request.parameters.LegacyAgentNumber');
var requestId = apim.getvariable('request.parameters.requestId');
var channelId = apim.getvariable('request.parameters.channelId');
var channelName = apim.getvariable('request.parameters.channelName');
var sm_user = apim.getvariable('request.parameters.sm_user');
var agentId = apim.getvariable('request.parameters.agent_id'); // 读取路径参数agent_id

// 构造合法查询串
var queryString = '$filter=contains(LegacyAgentNumber,\'' + encodeURIComponent(LegacyAgentNumber) + '\')';

// 写入上下文变量
apim.setvariable('queryString', queryString);
apim.setvariable('requestId', requestId);
apim.setvariable('channelId', channelId);
apim.setvariable('channelName', channelName);
apim.setvariable('sm_user', sm_user);

var contentType = apim.getvariable('request.headers.content-type');
apim.setvariable(sm_user, contentType, 'set');

if (error) {
    // 修正错误返回结构,正确引用requestId
    var errorResp = {
        "errorId": requestId + "Err",
        "refidRequest": requestId,
        "httpCode": "400",
        "httpMessage": "Bad Request",
        "moreInformation": "Invalid Input Parameters"
    }
    apim.setvariable('message.body', errorResp);
    apim.setvariable('message.headers.content-type','application/json');
    apim.setvariable('message.status.code', 400);
}
else {
    // 构造正常响应
    var vid = apim.getvariable ('request.parameters.id');
    var vapiversion = apim.getvariable('api.version');
    var vapiname = apim.getvariable('api.name');

    var sresponse= {"AgentMailingAddressKeepAliveResponse": {"responseHeader": {
        "id": vid +"_rs",
        "refidRequest": vid,
        "cmdType": "response",
        "cmdStatus": "Success",
        "message": "keepAlive response message "+vapiname+":"+vapiversion
    }}}
    apim.setvariable('message.body', sresponse);
    apim.setvariable('message.headers.content-type','application/json');
    apim.setvariable('message.status.code',200);
}

内容的提问来源于stack exchange,提问作者Pinky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 15:54:03