当尝试使用权限添加到亚马逊SNS主题 AWS SDK用于.NET /1.1 .0.1使用类似于以下代码:

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> 
有帮助吗?

解决方案

<强>更新 - 这在.NET API的最新版本已经解决了所以任何人都仍然遇到此问题应该升级到 API的1.1.1版本


我花了一段时间才弄清楚发生了什么事情,我最后不得不使用客户端的HTTP版本,以及的 Wireshark的看发生了什么事,但似乎没有用于.NET / 1.1.0.1在AWS SDK中的错误。当我写了使用 AWS SDK类似功能的Java 事情证明做工精细,下面是一个该代码的小块:

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

看发生了什么事情的Wireshark通过翻起以下,有一些小的截尾和编辑为了清楚:

POST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded; charset=utf-8
User-Agent: AWS Java SDK-1.0.14
Host: sns.us-east-1.amazonaws.com
Content-Length: 419

Action=AddPermission&
SignatureMethod=HmacSHA256&
Label=PrincipleAllowControl&
ActionName.member.1=Publish&
AWSAccessKeyId=xxx&
Version=2010-03-31&
AWSAccountId.member.1=xxx&
SignatureVersion=2&
TopicArn=arn%3Aaws%3Asns%3Aus-east-1%3A589983072084%3Axxx&
Timestamp=2010-10-31T02%3A10%3A10.833Z&
Signature=Bq09wa2vF1levQGcQZWVaix3UG7Mxlq2JCk4znEYHAM%3D

POST / HTTP/1.1
User-Agent: AWS SDK for .NET/1.1.0.1
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Host: sns.us-east-1.amazonaws.com
Content-Length: 422

Action=AddPermission&
TopicArn=arn%3Aaws%3Asns%3Aus-east-1%3A589983072084%3Axxx&
Label=PrincipleAllowControl&
AWSAccountIds.member.1=xxx&
ActionNames.member.1=Publish&
AWSAccessKeyId=xxx&
SignatureVersion=2&
SignatureMethod=HmacSHA256&
Timestamp=2010-10-30T21%3A18%3A39.753Z&
Version=2010-03-31&
Signature=m9OvL1v91eurDa5QYP9gwrd2crdtssHsDFonFny3frU%3D

可以看到,AWS SDK用于.NET正在使用AWSAccountIds和ActionNames而非AWSAccountId和ActionName使用的AWS Java SDK的这解释被返回的错误消息的呼叫。

有关现在还没有出现太大可关于它的短不使用.NET应用程序的命令,并编写自己的代码来进行调用来完成。幸运的话这将是固定在一个更新到SDK。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top