簡體   English   中英

如何取消訂閱 email 的 AWS SNS 主題?

[英]How to unsubscribe email from AWS SNS Topic?

我有一個端點將指定的 email 訂閱到我的 SNS 主題:

        [HttpPost("subscriptions/{email}")]
        public async Task SubscribeEmail(string email)
        {
            try
            {
                var request = new SubscribeRequest()
                {
                    TopicArn = AwsServicesConstants.SenderTopicArn,
                    ReturnSubscriptionArn = true,
                    Protocol = "email",
                    Endpoint = email,
                };

                var response = await _snsClient.SubscribeAsync(request);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Unexpected error: {ex}");
            }
        }

我怎樣才能取消訂閱給定的 email 從那個主題只有一個指定的 email 像這樣

[HttpDelete("subscriptions/{email}")]
public async Task<UnsubscribeResponse> UnsubscribeEmail(string email)
{
    var request = new UnsubscribeRequest(email);

    var response = await _snsClient.UnsubscribeAsync(request);

    return response;
}

實際上,取消訂閱不起作用,因為UnsubscribeRequest只需要 subscriptionArn,而不是email

您需要通過調用ListSubscriptionsByTopic來識別訂閱(訂閱后),查找與所需 email 地址匹配的端點。 然后,您可以提取 ARN 並在調用Unsubscribe時使用它。

您可以編寫應用程序邏輯以使用 email 地址獲取 ARN 值。 這是一個 C# 示例,它向您展示了使用 AWS SDK 為 .NET 使用該用例的邏輯。

     public async Task<string> UnSubEmail(string email)
        {
            var client = new AmazonSimpleNotificationServiceClient(RegionEndpoint.USEast2);
            var arnValue = await GetSubArn(client, email);
            await RemoveSub(client, arnValue);
            return $"{email} was successfully deleted!";
        }

  public static async Task<string> GetSubArn(IAmazonSimpleNotificationService client, string email)
        {
            var request = new ListSubscriptionsByTopicRequest();
            request.TopicArn = TopicArn;
            var subArn = string.Empty;

            var response = await client.ListSubscriptionsByTopicAsync(request);
            List<Subscription> allSubs = response.Subscriptions;

            // Get the ARN Value for this subscription.
            foreach (Subscription sub in allSubs)
            {
                if (sub.Endpoint.Equals(email))
                {
                    subArn = sub.SubscriptionArn;
                    return subArn;
                }
            }

            return string.Empty;
        }


 public static async Task<string> RemoveSub(IAmazonSimpleNotificationService client, string subArn)
        {
            var request = new UnsubscribeRequest();
            request.SubscriptionArn = subArn;
            await client.UnsubscribeAsync(request);

            return string.Empty;
        }

您可以在 AWS 代碼庫中找到完整的 .NET 示例:

構建一個翻譯消息的發布和訂閱應用程序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM