![](/img/trans.png)
[英]How to use email dynamic list to SNS Topic Subscription in AWS CloudFormation?
[英]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.