You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Azure.ResourceManager.EventGrid为存储账户编程创建事件订阅

使用Azure.ResourceManager.EventGrid创建存储账户BlobCreated事件订阅

以下是用Azure.ResourceManager.EventGrid SDK实现你给出的Azure CLI命令等效功能的代码示例,适配批量给存储账户创建事件订阅的场景:

前置依赖

确保项目已安装对应NuGet包:

Install-Package Azure.ResourceManager.EventGrid
Install-Package Azure.ResourceManager.Storage
Install-Package Azure.Identity

核心实现代码

using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.EventGrid;
using Azure.ResourceManager.EventGrid.Models;
using System.Collections.Generic;

public async Task CreateStorageBlobEventSubscriptionAsync(
    string storageAccountResourceId,
    string eventSubscriptionName,
    string azureFunctionEndpointUrl)
{
    // 初始化ArmClient(自动适配本地CLI/VS、Azure托管环境的身份验证)
    var armClient = new ArmClient(new DefaultAzureCredential());

    // 获取目标存储账户的资源对象
    var storageAccountResource = armClient.GetGenericResource(new ResourceIdentifier(storageAccountResourceId));
    await storageAccountResource.GetAsync();

    // 构建事件订阅配置
    var eventSubscriptionData = new EventSubscriptionData()
    {
        // 指定Azure Function作为事件接收端点
        Destination = new WebHookEventSubscriptionDestination()
        {
            EndpointUrl = new Uri(azureFunctionEndpointUrl)
        },
        // 设置事件过滤规则
        Filter = new EventSubscriptionFilter()
        {
            // 仅监听BlobCreated事件
            IncludedEventTypes = new List<string>() { "Microsoft.Storage.BlobCreated" },
            // 限定只处理指定容器下的Blob事件
            SubjectBeginsWith = "/blobServices/default/containers/container/blobs/",
            // 配置高级过滤条件
            AdvancedFilters = new List<AdvancedFilter>()
            {
                // 仅接收指定API操作触发的事件
                new StringInAdvancedFilter("data.api", new List<string>()
                {
                    "CopyBlob", "PutBlob", "PutBlockList", "FlushWithClose", "CreateFile"
                }),
                // 过滤掉内容长度为0的Blob事件
                new NumberGreaterThanAdvancedFilter("data.contentLength", 0)
            }
        }
    };

    // 创建或更新事件订阅
    var eventSubscriptionCollection = storageAccountResource.GetEventSubscriptions();
    await eventSubscriptionCollection.CreateOrUpdateAsync(
        WaitUntil.Completed,
        eventSubscriptionName,
        eventSubscriptionData);
}

关键细节说明

  • 身份验证:DefaultAzureCredential会自动识别运行环境的身份信息,无需手动配置密钥,适配本地开发、Azure云服务等多种场景。
  • 过滤规则映射:代码中的配置完全对应你给出的CLI参数:
    • SubjectBeginsWith匹配--subject-begins-with
    • StringInAdvancedFilter匹配--advanced-filter data.api StringIn ...
    • NumberGreaterThanAdvancedFilter匹配--advanced-filter data.contentLength NumberGreaterThan 0
  • 事件源定位:通过存储账户的资源ID获取资源对象,以此为入口创建事件订阅,符合Azure资源管理的层级逻辑。

批量处理示例

如果要给多个存储账户批量创建订阅,直接循环调用上述方法即可:

// 待处理的存储账户资源ID列表
var storageAccountIds = new List<string>
{
    "/subscriptions/xxx/resourceGroups/xxx/providers/Microsoft.Storage/storageAccounts/account1",
    "/subscriptions/xxx/resourceGroups/xxx/providers/Microsoft.Storage/storageAccounts/account2"
};

// Azure Function的事件网格触发端点
var functionEndpoint = "https://your-function-app.azurewebsites.net/runtime/webhooks/eventgrid?functionName=your-function&code=xxx";
var subscriptionNamePrefix = "BlobCreated-To-Function";

foreach (var storageId in storageAccountIds)
{
    var subscriptionName = $"{subscriptionNamePrefix}-{Path.GetFileName(storageId)}";
    await CreateStorageBlobEventSubscriptionAsync(storageId, subscriptionName, functionEndpoint);
}

内容的提问来源于stack exchange,提问作者Enrique Dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 12:02:52