我一直在使用最近发布的支持C# lambda的SDK。我已经设置了一个SNS主题,Lambda A会发布到该主题。这一切都很顺利。现在我有Lambda B订阅了同一个主题。当我触发Lambda A时,Lambda B被触发并传递了一个JSON消息。问题是我似乎无法将JSON解析为Amazon.SimpleNotificationService.Util.Message类型。
我已经给出了这个JSON。
{
"Records": [
{
"EventSource": "aws:sns",
"EventVersion": "1.0",
"EventSubscriptionArn": "arn:.......",
"Sns": {
"Type": "Notification",
"MessageId": "ce4a1d7c-c50d-51ea-bfe8-4dc1078795fe",
"TopicArn": "arn:.......",
"Subject": null,
"Message": "test queue",
"Timestamp": "2016-12-04T07:05:46.709Z",
"SignatureVersion": "1",
"Signature": "<mysighere>",
"SigningCertUrl": "<pem url here>",
"UnsubscribeUrl": "<unsub url here>",
"MessageAttributes": {}
}
}
]
}
所以我尝试编写了以下代码(其中messageText是一个“object”类型的参数,它仅提供了“Sns”节点)。
var j = Newtonsoft.Json.Linq.JObject.Parse(messageText.ToString());
var sns = jsonData["Records"][0]["Sns"];
Console.Write($"sns object: {sns}");
var message = Message.ParseMessage(sns.ToString());
但是ParseMessage调用时会抛出错误,说SigningCertUrl字段为空。我已经将JSON写出到Cloudwatch,看到所有的字段都有值。
我错在哪里?我以为Lambda序列化程序可以帮我解析Message参数,但当我尝试这样做时,所有属性都为空。
Console.Write($"sns object: {sns}");
的输出是什么? - Mark B