代码之家  ›  专栏  ›  技术社区  ›  rjzii

使用.NET库时向Amazon SNS主题添加权限时出错

  •  1
  • rjzii  · 技术社区  · 14 年前

    尝试使用 AWS SDK for .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> 
    
    1 回复  |  直到 13 年前
        1
  •  1
  •   rjzii    14 年前

    更新 This has been resolved 在最新版本的.NET API中,因此任何仍然遇到此问题的人都应该升级到 1.1.1 version


    我花了一段时间才弄清楚发生了什么,结果我不得不使用客户端的HTTP版本 Wireshark 去观察发生了什么,但是在AWS SDK for.NET/1.1.0.1中似乎有一个bug。当我使用 AWS SDK for 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 for.NET正在使用AWSAccountId和ActionNames进行调用,而AWS Java SDK使用AWSAccountId和ActionName来解释返回的错误消息。