这是对this question here.的扩展,我有一个调用REST API的策略。 API返回一条错误消息,并且此消息需要本地化。
一种方法当然是让API返回本地化消息,但是CustomPolicy本身是否可以本地化错误代码?根据CustomPolicy Docs,REST API可以将错误代码与冲突错误代码一起发送。我们的想法是使用此错误代码作为键并选择本地化消息(从链接答案中提到的messageValue枚举中选择)。
但是,我们似乎无法捕获/处理API返回的错误数据。该政策似乎可以自行处理错误代码,我们想知道是否有可能从该政策本身注入本地化的异常/错误消息。
谢谢!
编辑:有关设置的更多信息。我们有一个带有DisplayWidget和ValidationTechnicalProfile的TechnicalProfile。 DisplayWidget用于输入和验证用户的电话/电子邮件,ValidationTechnicalProfile使用包含所有用户信息的RestAPI进行最终调用,以注册他/她。此RestAPI调用输出就是我们要本地化的内容。
据我所了解,在链接的SO问题中的建议是,我们在DisplayWidget中集成了另一个DisplayClaim(引用一个枚举),并根据调用返回的ErrorCode对其进行更改以显示适当的代码。但是,据我了解,这还需要编辑API以仅返回200和代码。该代码将指示结果的真实性质-成功或要显示的枚举之一的代码。
因此,我们的目的是检查是否有一种方法可以遵循策略的流程(破坏注册/登录过程),但同时可以本地化API的显示响应。
答案 0 :(得分:0)
我们设法找到了解决方法,因此我将其发布在这里,以供其他对此感兴趣的人使用。
我们对本地化的限制是使用短语来管理我们的翻译并希望将CustomPolicy特定翻译全部集中在一处的事实。我们的CD工作流程如下:
PolicyCommit-> 通过PS生成变量替换-> 发布通过PS和策略上传变量替换和本地化字符串
除非该政策本地化API响应,否则我们可以通过以下选择来实现此目标:
将语言发送到API并让API返回相应的错误消息 以适当的语言。由于种种原因,我们不愿意遵循此原则,但主要是因为我们还必须处理API中的不同区域等,这是该政策本身要做的事情。
实际上,我们只有一个调用的API,也只有两个错误消息。因此,我们创建了带有两个将被本地化的错误消息的枚举。然后,我们使用了InputClaimsTransformations链,该链完成了以下操作:
对所有错误重复步骤1至3
1. CreateStringClaim (Create ClaimTypes for each of the error codes, holding the index of the error code in the enum)
2. GetMappedValueFromLocalizedCollection (Make the localized enum choose and hold the value of the required error code)
3. AddItemToStringCollection (Add the localized error from the enum to a StringCollection)
4. GenerateJson (Add the error codes StringCollection to the JSON payload to be sent to the API)
通过这种方式,该策略对所有错误执行了本地化,我们将其与请求一起发送给了API。发生错误时,API会从策略中选择一条错误消息,然后将其发送回去。由于我们的CD结构和词组集成,因此这种方法对我们来说是很容易的,比将翻译的内容实际存储在云中托管的API来访问要容易得多。
希望这对某人有帮助;我也可以添加代码,以防有人需要它:)