在Apigee中,“分配消息策略”似乎仅对成功的响应起作用。如果服务器以错误代码(例如403 Forbidden)响应,则该策略不会更改响应。还有其他方法可以修改Apigee中的错误响应。
这是我的政策。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
<DisplayName>Assign Message-1</DisplayName>
<Properties/>
<Remove>
<Headers>
<Header name="Server"/>
</Headers>
</Remove>
<AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>
答案 0 :(得分:0)
您可以使用FaultRules在Apigee中修改错误响应。您可以查看Apigee关于Fault handling的文档。
未执行AssignMessage策略的原因是,该错误在执行策略之前发生,因此被跳过。
您可以将AssignMessage策略移动到流中的较早位置执行,也可以使用错误处理逻辑捕获错误,并在执行所有所需的逻辑后抛出错误。
答案 1 :(得分:0)
如果成功和错误的响应消息不同,
我通常创建2个“分配消息”策略,一个用于成功,另一个用于错误响应。
成功示例:
var app = angular.module('MyApp', ['ui.grid', 'ngSanitize', 'angularTrix', 'ui.codemirror', 'ngRoute']);
app.config(function ($routeProvider) {
$routeProvider
.when('/home', {
templateUrl: 'partials/Home.ashx',
controller: 'HomeController'
})
.when('/project/:ProjectID', {
templateUrl: 'partials/Projects.ashx',
controller: 'ProjectController'
})
.when('/form/:ProjectID/:FormID', {
templateUrl: 'partials/Form.ashx?fid=1',
controller: 'FormController'
})
.otherwise({ redirectTo: '/home' });
错误示例:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-ReturnSuccessResponse">
<DisplayName>AM-ReturnSuccessResponse</DisplayName>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
<AssignTo createNew="false" transport="http" type="response"/>
<Set>
<Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
@resp.responseMessage#
</Payload>
<StatusCode>{resp.httpStatusCode}</StatusCode>
<ReasonPhrase>{resp.reasonPhrase}</ReasonPhrase>
</Set>
</AssignMessage>
然后在您的流程中,您必须设置条件来路由这样的策略
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <AssignMessage async="false" continueOnError="false" enabled="true" name="AM-ReturnErrorResponse">
<DisplayName>AM-ReturnErrorResponse"</DisplayName>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
<AssignTo createNew="false" transport="http" type="response"/>
<Properties/>
<Set>
<Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
{
"error" : "@resp.error#",
"timeStamp" : "@resp.responseDateTime#"
}
</Payload>
<StatusCode>{resp.httpStatusCode}</StatusCode>
<ReasonPhrase>{resp.reasonPhrase}</ReasonPhrase>
</Set> </AssignMessage>
备注:因为通常成功的http状态代码为200,所以我将上面的代码设置为条件。但这是例如,您可以根据情况设计条件。