gpt4 book ai didi

azure-api-management - API 管理无法将响应正文转换为字符串

转载 作者:行者123 更新时间:2023-12-02 20:50:01 24 4
gpt4 key购买 nike

在Azure API管理中,当返回客户端的响应是500时,我希望检查响应的正文以查看它是否与“某些文本”匹配。我需要这样做,以便我可以更改响应正文以包含在此特定场景中一些更有用的文本。

以下<outbound>我的策略部分已被 API 管理控制台接受,但是当我测试并得到 500 时,API 管理会生成错误 -

Expression evaluation failed. Unable to cast object of type 'Microsoft.WindowsAzure.ApiManagement.Proxy.Gateway.MessageBody' to type 'System.String'.

我猜这是我的错,但是有人知道我如何修改策略以便它不会产生错误吗?澄清一下,错误是由这一行生成的 - ((string)(object)context.Response.Body == "Some text") .

<outbound>
<choose>
<when condition="@((context.Response.StatusCode == 500) && ((string)(object)context.Response.Body == "Some text"))">
<set-status code="500" reason="Internal Server Error" />
<set-header name="Content-Type" exists-action="override">
<value>application/json</value>
</set-header>
<set-body>
{
"statusCode": "500",
"Message": "Some different, more helpful text."
}
</set-body>
</when>
</choose>
</outbound>

更新

我发现 context.Response.Body类型为IMessageBody 。关于这种类型的文档似乎少得可怜,我能找到的唯一引用资料位于 <set-body> 下。在 Transformation Policies API管理文档。

问题是,当我尝试保存我的策略时,MS 记录的示例会产生异常 -

<set-body>
@{
JObject inBody = context.Request.Body.As<JObject>();
if (inBody.attribute == <tag>) {
inBody[0] = 'm';
}
return inBody.ToString();
}
</set-body>

Property or indexer 'string.this[int]' cannot be assigned to -- it is read only

最佳答案

尝试 context.Request.Body.As ()。方法 As 目前支持以下类型作为通用参数值:

  • 字节[]
  • 字符串
  • JToken
  • JObject
  • JArray
  • XNode
  • XElement
  • X文档

请注意,如果您尝试通过不包含有效 JSON 的响应调用 .As ,您将收到异常,这也适用于其他类型。

关于azure-api-management - API 管理无法将响应正文转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42505746/

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