尝试发布到具有一个或多个属性的 SNS 主题。 如果没有属性,一切都可以正常工作,但添加属性后,我们会收到带有错误请求的 400 响应。
我们尝试通过以下三种方式添加属性。
procedure TForm1.Button1Click(Sender: TObject);
var
AWSOptions: IAWSOptions;
SNS: ISNSClient;
SNSRequest: ISNSPublishToTopicRequest;
SNSResponse: ISNSPublishResponse;
a: TSNSMessageAttributeValue;
begin
AWSOptions := TAWSOptions.Create;
with AWSOptions do
begin
Region := 'eu-west-1';
AccessKeyId := '??????';
SecretAccessKey := '??????';
end;
SNS := TSNSClient.Create(AWSOptions);
SNSRequest := TSNSPublishToTopicRequest .Create(edt_ARN.Text, edt_Message.Text);
// SNSRequest.MessageAttributes.AddString('test', 'testvalue');
// SNSRequest.MessageAttributes.AddOrSetValue('test', TSNSMessageAttributeValue.Create('String', 'testvalue'));
// a.Value := 'testvalue';
// a.DataType := 'String';
// SNSRequest.MessageAttributes.Add('test', a);
SNSResponse := SNS.Publish(SNSRequest);
ShowMessage(Format('Success: %s - Error: %s - Status: %d / %s - Message: %s' ,
[BoolToStr(SNSResponse.IsSuccessful),
BoolToStr(SNSResponse.IsError),
SNSResponse.StatusCode,
SNSResponse.StatusText,
SNSResponse.MessageId])
);
end;
有人知道这里出了什么问题吗? 也想直接联系 appercept,但似乎联系不上。
总结一下。使用的Appercept AWS SDK版本不是最新版本,该问题已在较新版本中修复。
提醒所有人,请始终确保您使用的是最新版本。
上例中,添加消息属性的正确方法是:
SNSRequest.MessageAttributes.AddString('test', 'testvalue');