Ошибка при добавлении разрешений на тему Amazon SNS при использовании библиотек .NET

StackOverflow https://stackoverflow.com/questions/4061836

  •  27-09-2019
  •  | 
  •  

Вопрос

При попытке добавить разрешения на тему Amazon 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> 
Это было полезно?

Решение

Обновлять - Это было решено в последней версии API .NET, чтобы любой все еще встречался с этой проблемой, должен обновить до 1.1.1 версия API.


Отвез меня некоторое время, чтобы выяснить, что происходит, и я закончил использовать HTTP-версию клиентов, а также Wireshark Чтобы посмотреть, что происходит, но кажется, что в AWS SDK есть ошибка для .NET / 1.1.0.1. Когда я написал аналогичную функцию, используя AWS SDK для Java Вещи оказались нормально, следующее является небольшим блоком этого кода:

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

Наблюдение за тем, что происходит через Wireshark, появилось следующее, с некоторым незначительным цензуром и редактированием для ясности:

Post / HTTP / 1.1 Тип содержимого: приложение / X-www-форма-орленкадированный; CHARSET = UTF-8 User-Agent: AWS Java SDK-1.0.14 Хост: sns.us-east-1.amazonaws.com Содержание - длина: 419 Action = AddPermission & SignatureMethod = HMACSHA256 & MALKET = CRIDUCLEALLOWCONTROLL & APCENAME.member.1 = публикация и AwsaccesskeyId = xxx & version = 2010-03-31 & awsaccountid.member.1 = xxx & signatureversion = 2 & topicarn = arn% 3aaws% 3asns% 3aus-oast - 1% 3Axxxx & Timestamp = 2010-10-31T02% 3A10% 3A10.833Z & Signature = bq09wa2vf1levqgcqzwvaix3ug7mxlq2jck4zneyham% 3d post / http / 1.1 пользовательский агент: AWS SDK для .NET / 1.1.0.1 Тип содержимого: приложение / X-www-form-urlencoded; Charset = UTF-8 Host: sns.us-east-1.amazonaws.com Длина содержимого: 422 Action = AddPermission & Topicarn = ARN% 3AAWS% 3ASNS% 3AUS-EAST-1% 3A589983072084% 3AXXXX & MALKET = PRIDUCLEALLOWCONTROL & AWSACCORTIDS.MEBLELLOWCONTROL & AWSACCORTIDS.MEMS. 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 вызывает вызов, использующий AWSACCORTIDS и ACTIONAMES, а не AWSACCORTID и ActionName, используемую AWS Java SDK, который объясняет сообщение об ошибке, которое было возвращено.

На данный момент, похоже, не так много, что можно сделать о нем, не используя команду в приложениях .NET и написание собственного кода, чтобы позвонить. С любой удачей это будет исправлено в обновлении SDK.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top