C# 使用.NET库时向Amazon SNS主题添加权限时出错
尝试使用/1.1.0.1向Amazon SNS主题添加权限时,请使用类似以下代码:C# 使用.NET库时向Amazon SNS主题添加权限时出错,c#,.net,amazon-sns,C#,.net,Amazon Sns,尝试使用/1.1.0.1向Amazon SNS主题添加权限时,请使用类似以下代码: AddPermissionRequest request = new AddPermissionRequest() .WithActionNames(new[] { "Publish" }) .WithAWSAccountIds(new[] { "xxx" }) .WithLabel("PrincipleAllowControl") .WithTopicArn(resourceNa
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的版本
我花了一段时间才弄清楚到底发生了什么,最后我不得不使用HTTP版本的客户端并观察发生了什么,但AWS SDK for.NET/1.1.0.1中似乎有一个bug。当我使用被证明工作正常的东西编写类似的函数时,下面是该代码的一小部分:
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
POST/HTTP/1.1
内容类型:application/x-www-form-urlencoded;字符集=utf-8
用户代理:AWS Java SDK-1.0.14
主持人:sns.us-east-1.amazonaws.com
内容长度:419
操作=添加权限&
SignatureMethod=HmacSHA256&
标签=原则控制&
ActionName.member.1=发布&
AWSAccessKeyId=xxx&
版本=2010-03-31&
AWSAccountId.member.1=xxx&
SignatureReversion=2&
TopicArn=arn%3AWS%3Asns%3Aus-east-1%3A58983072084%3AXX&
时间戳=2010-10-31T02%3A10%3A10.833Z&
签名=Bq09wa2vF1levQGcQZWVaix3UG7Mxlq2JCk4znEYHAM%3D
POST/HTTP/1.1
用户代理:AWS SDK for.NET/1.1.0.1
内容类型:application/x-www-form-urlencoded;字符集=utf-8
主持人:sns.us-east-1.amazonaws.com
内容长度:422
操作=添加权限&
TopicArn=arn%3AWS%3Asns%3Aus-east-1%3A58983072084%3AXX&
标签=原则控制&
AWSAccountIds.member.1=xxx&
ActionNames.member.1=发布&
AWSAccessKeyId=xxx&
SignatureReversion=2&
SignatureMethod=HmacSHA256&
时间戳=2010-10-30T21%3A18%3A39.753Z&
版本=2010-03-31&
签名=m9OvL1v91eurDa5QYP9gwrd2crdtssHsDFonFny3frU%3D
如您所见,AWS SDK for.NET正在使用AWSAccountId和ActionName进行调用,而AWS Java SDK使用的AWSAccountId和ActionName解释了返回的错误消息
目前看来,除了在.NET应用程序中不使用该命令并编写自己的代码来进行调用之外,似乎没有什么可以做的。如果运气好的话,这将在SDK的更新中得到修复。更新-在最新版本的.NET API中,因此仍然遇到此问题的任何人都应该升级到API的版本
我花了一段时间才弄清楚到底发生了什么,最后我不得不使用HTTP版本的客户端并观察发生了什么,但AWS SDK for.NET/1.1.0.1中似乎有一个bug。当我使用被证明工作正常的东西编写类似的函数时,下面是该代码的一小部分:
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
POST/HTTP/1.1
内容类型:application/x-www-form-urlencoded;字符集=utf-8
用户代理:AWS Java SDK-1.0.14
主持人:sns.us-east-1.amazonaws.com
内容长度:419
操作=添加权限&
SignatureMethod=HmacSHA256&
标签=原则控制&
ActionName.member.1=发布&
AWSAccessKeyId=xxx&
版本=2010-03-31&
AWSAccountId.member.1=xxx&
SignatureReversion=2&
TopicArn=arn%3AWS%3Asns%3Aus-east-1%3A58983072084%3AXX&
时间戳=2010-10-31T02%3A10%3A10.833Z&
签名=Bq09wa2vF1levQGcQZWVaix3UG7Mxlq2JCk4znEYHAM%3D
POST/HTTP/1.1
用户代理:AWS SDK for.NET/1.1.0.1
内容类型:application/x-www-form-urlencoded;字符集=utf-8
主持人:sns.us-east-1.amazonaws.com
内容长度:422
操作=添加权限&
TopicArn=arn%3AWS%3Asns%3Aus-east-1%3A58983072084%3AXX&
标签=原则控制&
AWSAccountIds.member.1=xxx&
ActionNames.member.1=发布&
AWSAccessKeyId=xxx&
SignatureReversion=2&
SignatureMethod=HmacSHA256&
时间戳=2010-10-30T21%3A18%3A39.753Z&
版本=2010-03-31&
签名=m9OvL1v91eurDa5QYP9gwrd2crdtssHsDFonFny3frU%3D
如您所见,AWS SDK for.NET正在使用AWSAccountId和ActionName进行调用,而AWS Java SDK使用的AWSAccountId和ActionName解释了返回的错误消息
目前看来,除了在.NET应用程序中不使用该命令并编写自己的代码来进行调用之外,似乎没有什么可以做的。如果运气好的话,这将在SDK更新中得到修复。Amazon评论说这将在即将到来的API更新中得到修复:Amazon评论说这将在即将到来的API更新中得到修复: