如何在 Azure API 管理中将字符串列表作为查询参数传递?



我已经创建了一个API GET端点,它接收字符串列表,并试图将其公开给APIM。 如何将字符串从 APIM 传递到端点,需要从请求中执行哪些转换?

这在很大程度上取决于您的后端期望的请求格式。

假设你想要一个像/multivalues?parm1=11&parm1=22这样的GET操作,你需要把它转换为POST操作体的JSON数组。以这种格式提供参数将允许您将多个值提取为字符串数组,然后将其转换为其他数组:

<set-method>POST</set-method>
<set-body template="none">var body = new JObject();
string[] arrayOfStrings = (string[])context.Request.Url.Query["parm1"];
var parameterArray = new JArray();
foreach(string value in arrayOfStrings)
{
var parm1 = new JObject();
parm1["name"] = "parm1";
parm1["value"] = value;                    
parameterArray.Add(parm1);
}
body["parameters"] = parameterArray;
return body.ToString();</set-body>

但是您也可以在一个字符串中拥有自己的分隔符,例如/multivalues?parm2=11,22

<set-method>POST</set-method>
<set-body template="none">var body = new JObject();
string[] arrayOfStrings = (string [])context.Request.Url.Query["parm2"];
string[] subArrayOfStrings = arrayOfStrings[0].Split(',');
var parameterArray = new JArray();
foreach(string value in subArrayOfStrings)
{
var parm2 = new JObject();
parm2["name"] = "parm2";
parm2["value"] = value;                    
parameterArray.Add(parm2);
}
body["parameters"] = parameterArray;
return body.ToString();</set-body>

除了 Kai 的回答之外,如果你想在转换后调用某个外部端点,你可以使用 send-request 策略。例如,您可以执行:

<send-request mode="new" response-variable-name="tokenstate" timeout="20" ignore-error="true">
<set-url><EXTERNAL URL HERE></set-url>
<set-method>POST</set-method>
<set-header name="Content-Type" exists-action="override">
<value>application/json</value>
</set-header>
<set-body template="none">var body = new JObject();
string[] arrayOfStrings = (string[])context.Request.Url.Query["parm1"];
var parameterArray = new JArray();
foreach(string value in arrayOfStrings)
{
var parm1 = new JObject();
parm1["name"] = "parm1";
parm1["value"] = value;                    
parameterArray.Add(parm1);
}
body["parameters"] = parameterArray;
return body.ToString();</set-body>
</send-request>

最新更新