You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Delphi Appercept AWS SDK向SNS主题发带属性消息遇400错误

解决AWS SNS添加消息属性后400错误的问题

针对你遇到的添加消息属性后返回400错误的问题,可从以下几个方面排查和修复:

1. 修复代码中的实例创建错误

你第三种方式的代码存在明显问题:未创建TSNSMessageAttributeValue的实例就直接赋值,会导致内存访问错误,进而构造出无效的请求发送给AWS,引发400错误。正确写法应为:

a := TSNSMessageAttributeValue.Create;
a.DataType := 'String';
a.Value := 'testvalue';
SNSRequest.MessageAttributes.Add('test', a);
// 注意:若组件会接管对象所有权,无需手动Free;否则需在请求发送后释放

2. 检查构造函数参数顺序

第二种方式中,需确认TSNSMessageAttributeValue.Create的参数顺序是否正确。若组件的构造函数定义为Create(Value: string; DataType: string),你当前传入的('String', 'testvalue')会导致DataType被设置为testvalue,不符合AWS要求。正确顺序应为:

SNSRequest.MessageAttributes.AddOrSetValue('test', TSNSMessageAttributeValue.Create('testvalue', 'String'));

3. 获取详细错误信息定位问题

当前代码仅显示基础状态信息,无法得知AWS返回的具体错误原因。修改代码获取详细错误码和消息:

SNSResponse := SNS.Publish(SNSRequest);

if SNSResponse.IsError then
begin
  ShowMessage(Format('错误码: %s - 错误信息: %s', 
    [SNSResponse.ErrorCode, SNSResponse.ErrorMessage]));
end
else
begin
  ShowMessage(Format('Success: %s - Status: %d / %s - Message: %s' ,
                    [BoolToStr(SNSResponse.IsSuccessful),
                      SNSResponse.StatusCode,
                      SNSResponse.StatusText,
                      SNSResponse.MessageId])
              );
end;

比如若返回InvalidParameterValue,说明属性的DataType或值不符合AWS规范;若返回MissingParameter,说明属性参数缺失。

4. 验证属性的格式规范

AWS SNS对消息属性有严格限制:

  • 属性名称:最多256字符,仅允许字母、数字、下划线、连字符、句号
  • String类型属性值:最多256字节,DataType必须严格设为String(大小写敏感)

5. 尝试更新组件版本

若以上操作均无效,可能是Appercept AWS组件存在版本bug,尝试更新到最新版本后再测试。

内容的提问来源于stack exchange,提问作者Tilroy_Stefan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 13:48:41