Ошибка при добавлении разрешений на тему Amazon SNS при использовании библиотек .NET
-
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.