本页面适用于 Apigee 和 Apigee Hybrid。
查看 Apigee Edge 文档。
对 message 流变量及其属性的访问取决于访问它的 API 代理流中的点。它在所有上下文中都可用,而某些对象(例如 request 或 response)则不可用。
使用场景
message 流变量的主要用例就是您的代理进入错误流时:request 和 response 流变量超出范围。
例如,在错误流中,response 对象不可用。如果位于错误流,您将无法使用 JavaScript 政策在 response 对象上设置响应标头。您可以改用以下任一方法:
这两个对象都在错误流中可用,并可用于在 JavaScript 政策中设置响应标头,也可在可以使用流程变量的其他政策中访问。
您可以使用 AssignMessage 政策将值(例如标头)分配给响应对象。AssignMessage 会自动处理从请求/响应流到错误流的上下文中的开关。
message 变量的另一个用例是使用 MessageLogging 政策在 PostClientFlow 中记录响应数据。如果您使用 message 对象,则可以在代理中在成功和错误状况后无缝记录响应信息。
示例
在错误流中,您可以使用 error 或 message 设置 JavaScript 政策中的响应标头。例如:
context.setVariable('error.header.FOO-1', 'error_header');OR
context.setVariable('message.header.FOO-2', 'message_header');但以下表达式不会正常运行:
context.setVariable('response.header.FOO-3', 'response_header');在本例中,response 变量在错误流中超出范围。(请注意,在跟踪记录中,这将使用变量直观指示,其中使用等号加斜杠显示)。
如需在单个政策中为成功和错误流设置响应标头,您可以在 JavaScript 政策中使用 message。例如:
<faultrules>
<faultrule name="invalid_key_rule">
<step>
<name>SetResponseHeaders</name>
</step>
<condition>(fault.name = "InvalidApiKey")</condition>
</faultrule>
</faultrules>在政策中,如下所示的代码会在任何流上下文中设置错误/响应标头:
context.setVariable('message.header.FOO-1', 'the header value');您可以对常规 ProxyResponse 流程重复使用此相同的政策,并且它将成功,因为 message 在所有上下文中均可用。