1

尝试使用适用于 .NET /1.1.0.1 的 AWS 开发工具包使用类似于以下的代码向 Amazon SNS 主题添加权限时:

AddPermissionRequest request = new AddPermissionRequest()
    .WithActionNames(new[] { "Publish" })
    .WithAWSAccountIds(new[] { "xxx" })
    .WithLabel("PrincipleAllowControl")
    .WithTopicArn(resourceName);
client.AddPermission(request); 

返回以下错误消息:

<ErrorResponse xmlns=" http://sns.amazonaws.com/doc/2010-03-31/">
  <Error>
    <Type>Sender</Type>
    <Code>ValidationError</Code>
    <Message>2 validation errors detected: Value null at 'actionName' failed to satisfy constraint: Member must not be null; Value null at 'aWSAccountId' failed to satisfy constraint: Member must not be null</Message>
  </Error>
  <RequestId>45054159-e46b-11df-9b30-693941920fe7</RequestId>
</ErrorResponse> 
4

1 回答 1

1

更新-这已在最新版本的 .NET API 中得到解决,因此仍然遇到此问题的任何人都应升级到 API 的1.1.1 版本


我花了一段时间才弄清楚发生了什么,最终我不得不使用客户端的 HTTP 版本以及Wireshark来观察正在发生的事情,但 AWS SDK for .NET/1.1 中似乎存在一个错误。 0.1。当我使用AWS SDK for Java编写一个类似的函数时,事情证明工作正常,以下是该代码的一小部分:

AddPermissionRequest permissionRequest = new AddPermissionRequest()
   .withActionNames("Publish")
   .withAWSAccountIds("xxx")
   .withLabel("PrincipleAllowControl")
   .withTopicArn(resourceName);
client.addPermission(permissionRequest); 

通过 Wireshark 观察正在发生的事情出现了以下情况,为了清晰起见,进行了一些小的审查和编辑:

发布/HTTP/1.1
内容类型:application/x-www-form-urlencoded;字符集=utf-8
用户代理:AWS Java SDK-1.0.14
主机:sns.us-east-1.amazonaws.com
内容长度:419

动作=添加权限&
签名方法=HmacSHA256&
标签=原则允许控制&
ActionName.member.1=发布&
AWSAccessKeyId=xxx&
版本=2010-03-31&
AWSAccountId.member.1=xxx&
签名版本=2&
TopicArn=arn%3Aaws%3Asns%3Aus-east-1%3A589983072084%3Axxx&
时间戳=2010-10-31T02%3A10%3A10.833Z&
签名=Bq09wa2vF1levQGcQZWVaix3UG7Mxlq2JCk4znEYHAM%3D

发布/HTTP/1.1
用户代理:适用于 .NET/1.1.0.1 的 AWS 开发工具包
内容类型:application/x-www-form-urlencoded;字符集=utf-8
主机:sns.us-east-1.amazonaws.com
内容长度:422

动作=添加权限&
TopicArn=arn%3Aaws%3Asns%3Aus-east-1%3A589983072084%3Axxx&
标签=原则允许控制&
AWSAccountIds.member.1=xxx&
ActionNames.member.1=发布&
AWSAccessKeyId=xxx&
签名版本=2&
签名方法=HmacSHA256&
时间戳=2010-10-30T21%3A18%3A39.753Z&
版本=2010-03-31&
签名=m9OvL1v91eurDa5QYP9gwrd2crdtssHsDFonFny3frU%3D

如您所见,适用于 .NET 的 AWS 开发工具包使用 AWSAccountIds 和 ActionNames 进行调用,而不是 AWS Java 开发工具包使用的 AWSAccountId 和 ActionName 来解释返回的错误消息。

目前,除了不在 .NET 应用程序中使用该命令并编写自己的代码来进行调用之外,似乎没有什么可以做的。运气好的话,这将在 SDK 的更新中得到修复。

于 2010-10-31T04:31:21.457 回答