gpt4 book ai didi

azure - APIM - 如何将相同的请求发送到两个不同的后端(使用相同的主请求正文)

转载 作者:行者123 更新时间:2023-12-03 00:19:20 24 4
gpt4 key购买 nike

Azure APIM 策略

我想在 API 中创建一个操作,将相同的请求发送到两个不同的后端。我尝试使用并设置一个新的网址,但我在转发相同的主要请求正文时遇到麻烦(以json格式)

任何建议都将受到高度赞赏

我使用以下策略,但我收到错误,因为不允许以这种方式在 set-body 标记中进行表达

<policies>
<inbound>
<base />
<set-variable name="bodyREQ" value="@(context.Request.Body.As<JObject>(preserveContent: true))" />
<set-query-parameter name="code" exists-action="override">
<value>{{FAcode}}</value>
</set-query-parameter>
<rewrite-uri template="/main" />
<set-backend-service base-url="**https://mymainbackend.azurewebsites.net**" />
<send-request mode="new" >
<set-url>https://**mysecondaryurl.azurewebsites.net**</set-url>
<set-method>POST</set-method>
<set-header name="content-type" exists-action="override">
<value>application/json</value>
</set-header>
<set-body>
**@(context.Variables.GetValueOrDefault<string>("bodyREQ"))</set-body>**
</set-body>
</send-request>
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>

最佳答案

我修复了政策中的以下错误:

变量存储为“JObject”,因此必须将以下行更改为相同的数据类型:

context.Variables.GetValueOrDefault<string>("bodyREQ")

=>
context.Variables.GetValueOrDefault<JObject>("bodyREQ")

政策set-body :更改为使用“{}”,返回值为字符串:

<set-body>@{
return context.Variables.GetValueOrDefault<JObject>("bodyREQ").ToString();
}
</set-body>

完整的政策:

<policies>
<inbound>
<base />
<set-variable name="bodyREQ" value="@(context.Request.Body.As<JObject>(preserveContent: true))" />
<set-query-parameter name="code" exists-action="override">
<value>{{FAcode}}</value>
</set-query-parameter>
<rewrite-uri template="/main" />
<set-backend-service base-url="https://rfqapiservicey27itmeb4cf7q.azure-api.net/echo/200" />
<send-request mode="new" response-variable-name="req">
<set-url>https://rfqapiservicey27itmeb4cf7q.azure-api.net/echo/200</set-url>
<set-method>POST</set-method>
<set-header name="content-type" exists-action="override">
<value>application/json</value>
</set-header>
<set-body>@{
return context.Variables.GetValueOrDefault<JObject>("bodyREQ").ToString();
}
</set-body>
</send-request>
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>

关于azure - APIM - 如何将相同的请求发送到两个不同的后端(使用相同的主请求正文),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72786637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com