使用.NET库时添加权限到亚马逊SNS话题时出错
-
27-09-2019 - |
题
当尝试使用权限添加到亚马逊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。
不隶属于 StackOverflow