{"id":"6c553e79-a5e3-4e20-a3f8-230d19f210a6","shortId":"Ntxjq9","kind":"skill","title":"azure-eventgrid-dotnet","tagline":"Azure Event Grid SDK for .NET. Client library for publishing and consuming events with Azure Event Grid. Use for event-driven architectures, pub/sub messaging, CloudEvents, and EventGridEvents.","description":"# Azure.Messaging.EventGrid (.NET)\n\nClient library for publishing events to Azure Event Grid topics, domains, and namespaces.\n\n## Installation\n\n```bash\n# For topics and domains (push delivery)\ndotnet add package Azure.Messaging.EventGrid\n\n# For namespaces (pull delivery)\ndotnet add package Azure.Messaging.EventGrid.Namespaces\n\n# For CloudNative CloudEvents interop\ndotnet add package Microsoft.Azure.Messaging.EventGrid.CloudNativeCloudEvents\n```\n\n**Current Version**: 4.28.0 (stable)\n\n## Environment Variables\n\n```bash\n# Topic/Domain endpoint\nEVENT_GRID_TOPIC_ENDPOINT=https://<topic-name>.<region>.eventgrid.azure.net/api/events\nEVENT_GRID_TOPIC_KEY=<access-key>\n\n# Namespace endpoint (for pull delivery)\nEVENT_GRID_NAMESPACE_ENDPOINT=https://<namespace>.<region>.eventgrid.azure.net\nEVENT_GRID_TOPIC_NAME=<topic-name>\nEVENT_GRID_SUBSCRIPTION_NAME=<subscription-name>\n```\n\n## Client Hierarchy\n\n```\nPush Delivery (Topics/Domains)\n└── EventGridPublisherClient\n    ├── SendEventAsync(EventGridEvent)\n    ├── SendEventsAsync(IEnumerable<EventGridEvent>)\n    ├── SendEventAsync(CloudEvent)\n    └── SendEventsAsync(IEnumerable<CloudEvent>)\n\nPull Delivery (Namespaces)\n├── EventGridSenderClient\n│   └── SendAsync(CloudEvent)\n└── EventGridReceiverClient\n    ├── ReceiveAsync()\n    ├── AcknowledgeAsync()\n    ├── ReleaseAsync()\n    └── RejectAsync()\n```\n\n## Authentication\n\n### API Key Authentication\n\n```csharp\nusing Azure;\nusing Azure.Messaging.EventGrid;\n\nEventGridPublisherClient client = new(\n    new Uri(\"https://mytopic.eastus-1.eventgrid.azure.net/api/events\"),\n    new AzureKeyCredential(\"<access-key>\"));\n```\n\n### Microsoft Entra ID (Recommended)\n\n```csharp\nusing Azure.Identity;\nusing Azure.Messaging.EventGrid;\n\nEventGridPublisherClient client = new(\n    new Uri(\"https://mytopic.eastus-1.eventgrid.azure.net/api/events\"),\n    new DefaultAzureCredential());\n```\n\n### SAS Token Authentication\n\n```csharp\nstring sasToken = EventGridPublisherClient.BuildSharedAccessSignature(\n    new Uri(topicEndpoint),\n    DateTimeOffset.UtcNow.AddHours(1),\n    new AzureKeyCredential(topicKey));\n\nvar sasCredential = new AzureSasCredential(sasToken);\nEventGridPublisherClient client = new(\n    new Uri(topicEndpoint),\n    sasCredential);\n```\n\n## Publishing Events\n\n### EventGridEvent Schema\n\n```csharp\nEventGridPublisherClient client = new(\n    new Uri(topicEndpoint),\n    new AzureKeyCredential(topicKey));\n\n// Single event\nEventGridEvent egEvent = new(\n    subject: \"orders/12345\",\n    eventType: \"Order.Created\",\n    dataVersion: \"1.0\",\n    data: new { OrderId = \"12345\", Amount = 99.99 });\n\nawait client.SendEventAsync(egEvent);\n\n// Batch of events\nList<EventGridEvent> events = new()\n{\n    new EventGridEvent(\n        subject: \"orders/12345\",\n        eventType: \"Order.Created\",\n        dataVersion: \"1.0\",\n        data: new OrderData { OrderId = \"12345\", Amount = 99.99 }),\n    new EventGridEvent(\n        subject: \"orders/12346\",\n        eventType: \"Order.Created\",\n        dataVersion: \"1.0\",\n        data: new OrderData { OrderId = \"12346\", Amount = 149.99 })\n};\n\nawait client.SendEventsAsync(events);\n```\n\n### CloudEvent Schema\n\n```csharp\nCloudEvent cloudEvent = new(\n    source: \"/orders/system\",\n    type: \"Order.Created\",\n    data: new { OrderId = \"12345\", Amount = 99.99 });\n\ncloudEvent.Subject = \"orders/12345\";\ncloudEvent.Id = Guid.NewGuid().ToString();\ncloudEvent.Time = DateTimeOffset.UtcNow;\n\nawait client.SendEventAsync(cloudEvent);\n\n// Batch of CloudEvents\nList<CloudEvent> cloudEvents = new()\n{\n    new CloudEvent(\"/orders\", \"Order.Created\", new { OrderId = \"1\" }),\n    new CloudEvent(\"/orders\", \"Order.Updated\", new { OrderId = \"2\" })\n};\n\nawait client.SendEventsAsync(cloudEvents);\n```\n\n### Publishing to Event Grid Domain\n\n```csharp\n// Events must specify the Topic property for domain routing\nList<EventGridEvent> events = new()\n{\n    new EventGridEvent(\n        subject: \"orders/12345\",\n        eventType: \"Order.Created\",\n        dataVersion: \"1.0\",\n        data: new { OrderId = \"12345\" })\n    {\n        Topic = \"orders-topic\"  // Domain topic name\n    },\n    new EventGridEvent(\n        subject: \"inventory/item-1\",\n        eventType: \"Inventory.Updated\",\n        dataVersion: \"1.0\",\n        data: new { ItemId = \"item-1\" })\n    {\n        Topic = \"inventory-topic\"\n    }\n};\n\nawait client.SendEventsAsync(events);\n```\n\n### Custom Serialization\n\n```csharp\nusing System.Text.Json;\n\nvar serializerOptions = new JsonSerializerOptions\n{\n    PropertyNamingPolicy = JsonNamingPolicy.CamelCase\n};\n\nvar customSerializer = new JsonObjectSerializer(serializerOptions);\n\nEventGridEvent egEvent = new(\n    subject: \"orders/12345\",\n    eventType: \"Order.Created\",\n    dataVersion: \"1.0\",\n    data: customSerializer.Serialize(new OrderData { OrderId = \"12345\" }));\n\nawait client.SendEventAsync(egEvent);\n```\n\n## Pull Delivery (Namespaces)\n\n### Send Events to Namespace Topic\n\n```csharp\nusing Azure;\nusing Azure.Messaging;\nusing Azure.Messaging.EventGrid.Namespaces;\n\nvar senderClient = new EventGridSenderClient(\n    new Uri(namespaceEndpoint),\n    topicName,\n    new AzureKeyCredential(topicKey));\n\n// Send single event\nCloudEvent cloudEvent = new(\"employee_source\", \"Employee.Created\", \n    new { Name = \"John\", Age = 30 });\nawait senderClient.SendAsync(cloudEvent);\n\n// Send batch\nawait senderClient.SendAsync(new[]\n{\n    new CloudEvent(\"source\", \"type\", new { Name = \"Alice\" }),\n    new CloudEvent(\"source\", \"type\", new { Name = \"Bob\" })\n});\n```\n\n### Receive and Process Events\n\n```csharp\nvar receiverClient = new EventGridReceiverClient(\n    new Uri(namespaceEndpoint),\n    topicName,\n    subscriptionName,\n    new AzureKeyCredential(topicKey));\n\n// Receive events\nReceiveResult result = await receiverClient.ReceiveAsync(maxEvents: 10);\n\nList<string> lockTokensToAck = new();\nList<string> lockTokensToRelease = new();\n\nforeach (ReceiveDetails detail in result.Details)\n{\n    CloudEvent cloudEvent = detail.Event;\n    string lockToken = detail.BrokerProperties.LockToken;\n    \n    try\n    {\n        // Process the event\n        Console.WriteLine($\"Event: {cloudEvent.Type}, Data: {cloudEvent.Data}\");\n        lockTokensToAck.Add(lockToken);\n    }\n    catch (Exception)\n    {\n        // Release for retry\n        lockTokensToRelease.Add(lockToken);\n    }\n}\n\n// Acknowledge successfully processed events\nif (lockTokensToAck.Any())\n{\n    await receiverClient.AcknowledgeAsync(lockTokensToAck);\n}\n\n// Release events for retry\nif (lockTokensToRelease.Any())\n{\n    await receiverClient.ReleaseAsync(lockTokensToRelease);\n}\n```\n\n### Reject Events (Dead Letter)\n\n```csharp\n// Reject events that cannot be processed\nawait receiverClient.RejectAsync(new[] { lockToken });\n```\n\n## Consuming Events (Azure Functions)\n\n### EventGridEvent Trigger\n\n```csharp\nusing Azure.Messaging.EventGrid;\nusing Microsoft.Azure.WebJobs;\nusing Microsoft.Azure.WebJobs.Extensions.EventGrid;\n\npublic static class EventGridFunction\n{\n    [FunctionName(\"ProcessEventGridEvent\")]\n    public static void Run(\n        [EventGridTrigger] EventGridEvent eventGridEvent,\n        ILogger log)\n    {\n        log.LogInformation($\"Event Type: {eventGridEvent.EventType}\");\n        log.LogInformation($\"Subject: {eventGridEvent.Subject}\");\n        log.LogInformation($\"Data: {eventGridEvent.Data}\");\n    }\n}\n```\n\n### CloudEvent Trigger\n\n```csharp\nusing Azure.Messaging;\nusing Microsoft.Azure.Functions.Worker;\n\npublic class CloudEventFunction\n{\n    [Function(\"ProcessCloudEvent\")]\n    public void Run(\n        [EventGridTrigger] CloudEvent cloudEvent,\n        FunctionContext context)\n    {\n        var logger = context.GetLogger(\"ProcessCloudEvent\");\n        logger.LogInformation($\"Event Type: {cloudEvent.Type}\");\n        logger.LogInformation($\"Source: {cloudEvent.Source}\");\n        logger.LogInformation($\"Data: {cloudEvent.Data}\");\n    }\n}\n```\n\n## Parsing Events\n\n### Parse EventGridEvent\n\n```csharp\n// From JSON string\nstring json = \"...\"; // Event Grid webhook payload\nEventGridEvent[] events = EventGridEvent.ParseMany(BinaryData.FromString(json));\n\nforeach (EventGridEvent egEvent in events)\n{\n    if (egEvent.TryGetSystemEventData(out object systemEvent))\n    {\n        // Handle system event\n        switch (systemEvent)\n        {\n            case StorageBlobCreatedEventData blobCreated:\n                Console.WriteLine($\"Blob created: {blobCreated.Url}\");\n                break;\n        }\n    }\n    else\n    {\n        // Handle custom event\n        var customData = egEvent.Data.ToObjectFromJson<MyCustomData>();\n    }\n}\n```\n\n### Parse CloudEvent\n\n```csharp\nCloudEvent[] cloudEvents = CloudEvent.ParseMany(BinaryData.FromString(json));\n\nforeach (CloudEvent cloudEvent in cloudEvents)\n{\n    var data = cloudEvent.Data.ToObjectFromJson<MyEventData>();\n    Console.WriteLine($\"Type: {cloudEvent.Type}, Data: {data}\");\n}\n```\n\n## System Events\n\n```csharp\n// Common system event types\nusing Azure.Messaging.EventGrid.SystemEvents;\n\n// Storage events\nStorageBlobCreatedEventData blobCreated;\nStorageBlobDeletedEventData blobDeleted;\n\n// Resource events\nResourceWriteSuccessEventData resourceCreated;\nResourceDeleteSuccessEventData resourceDeleted;\n\n// App Service events\nWebAppUpdatedEventData webAppUpdated;\n\n// Container Registry events\nContainerRegistryImagePushedEventData imagePushed;\n\n// IoT Hub events\nIotHubDeviceCreatedEventData deviceCreated;\n```\n\n## Key Types Reference\n\n| Type | Purpose |\n|------|---------|\n| `EventGridPublisherClient` | Publish to topics/domains |\n| `EventGridSenderClient` | Send to namespace topics |\n| `EventGridReceiverClient` | Receive from namespace subscriptions |\n| `EventGridEvent` | Event Grid native schema |\n| `CloudEvent` | CloudEvents 1.0 schema |\n| `ReceiveResult` | Pull delivery response |\n| `ReceiveDetails` | Event with broker properties |\n| `BrokerProperties` | Lock token, delivery count |\n\n## Event Schemas Comparison\n\n| Feature | EventGridEvent | CloudEvent |\n|---------|----------------|------------|\n| Standard | Azure-specific | CNCF standard |\n| Required fields | subject, eventType, dataVersion, data | source, type |\n| Extensibility | Limited | Extension attributes |\n| Interoperability | Azure only | Cross-platform |\n\n## Best Practices\n\n1. **Use CloudEvents** — Prefer CloudEvents for new implementations (industry standard)\n2. **Batch events** — Send multiple events in one call for efficiency\n3. **Use Entra ID** — Prefer managed identity over access keys\n4. **Idempotent handlers** — Events may be delivered more than once\n5. **Set event TTL** — Configure time-to-live for namespace events\n6. **Handle partial failures** — Acknowledge/release events individually\n7. **Use dead-letter** — Configure dead-letter for failed events\n8. **Validate schemas** — Validate event data before processing\n\n## Error Handling\n\n```csharp\nusing Azure;\n\ntry\n{\n    await client.SendEventAsync(cloudEvent);\n}\ncatch (RequestFailedException ex) when (ex.Status == 401)\n{\n    Console.WriteLine(\"Authentication failed - check credentials\");\n}\ncatch (RequestFailedException ex) when (ex.Status == 403)\n{\n    Console.WriteLine(\"Authorization failed - check RBAC permissions\");\n}\ncatch (RequestFailedException ex) when (ex.Status == 413)\n{\n    Console.WriteLine(\"Payload too large - max 1MB per event, 1MB total batch\");\n}\ncatch (RequestFailedException ex)\n{\n    Console.WriteLine($\"Event Grid error: {ex.Status} - {ex.Message}\");\n}\n```\n\n## Failover Pattern\n\n```csharp\ntry\n{\n    var primaryClient = new EventGridPublisherClient(primaryUri, primaryKey);\n    await primaryClient.SendEventsAsync(events);\n}\ncatch (RequestFailedException)\n{\n    // Failover to secondary region\n    var secondaryClient = new EventGridPublisherClient(secondaryUri, secondaryKey);\n    await secondaryClient.SendEventsAsync(events);\n}\n```\n\n## Related SDKs\n\n| SDK | Purpose | Install |\n|-----|---------|---------|\n| `Azure.Messaging.EventGrid` | Topics/Domains (this SDK) | `dotnet add package Azure.Messaging.EventGrid` |\n| `Azure.Messaging.EventGrid.Namespaces` | Pull delivery | `dotnet add package Azure.Messaging.EventGrid.Namespaces` |\n| `Azure.Identity` | Authentication | `dotnet add package Azure.Identity` |\n| `Microsoft.Azure.WebJobs.Extensions.EventGrid` | Azure Functions trigger | `dotnet add package Microsoft.Azure.WebJobs.Extensions.EventGrid` |\n\n## Reference Links\n\n| Resource | URL |\n|----------|-----|\n| NuGet Package | https://www.nuget.org/packages/Azure.Messaging.EventGrid |\n| API Reference | https://learn.microsoft.com/dotnet/api/azure.messaging.eventgrid |\n| Quickstart | https://learn.microsoft.com/azure/event-grid/custom-event-quickstart |\n| Pull Delivery | https://learn.microsoft.com/azure/event-grid/pull-delivery-overview |\n| GitHub Source | https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/eventgrid/Azure.Messaging.EventGrid |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["azure","eventgrid","dotnet","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding"],"capabilities":["skill","source-sickn33","skill-azure-eventgrid-dotnet","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-eventgrid-dotnet","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34928 github stars · SKILL.md body (13,178 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-24T18:50:30.188Z","embedding":null,"createdAt":"2026-04-18T21:32:22.442Z","updatedAt":"2026-04-24T18:50:30.188Z","lastSeenAt":"2026-04-24T18:50:30.188Z","tsv":"'-1':375 '/api/events':91,155,174 '/azure/azure-sdk-for-net/tree/main/sdk/eventgrid/azure.messaging.eventgrid':1051 '/azure/event-grid/custom-event-quickstart':1041 '/azure/event-grid/pull-delivery-overview':1046 '/dotnet/api/azure.messaging.eventgrid':1037 '/orders':311,318 '/orders/system':284 '/packages/azure.messaging.eventgrid':1032 '1':188,315,824 '1.0':228,251,266,351,370,407,776 '10':503 '12345':232,256,290,355,413 '12346':271 '149.99':273 '1mb':947,950 '2':322,834 '3':845 '30':456 '4':855 '4.28.0':78 '401':918 '403':929 '413':941 '5':865 '6':877 '7':884 '8':896 '99.99':234,258,292 'access':853 'acknowledg':539 'acknowledge/release':881 'acknowledgeasync':136 'action':1064 'add':57,65,73,1000,1007,1013,1021 'age':455 'alic':471 'amount':233,257,272,291 'api':140,1033 'app':735 'applic':1058 'architectur':27 'ask':1102 'attribut':815 'authent':139,142,179,920,1011 'author':931 'await':235,274,300,323,380,414,457,462,500,545,554,568,910,972,987 'azur':2,5,19,41,145,427,574,800,817,908,1017 'azure-eventgrid-dotnet':1 'azure-specif':799 'azure.identity':164,1010,1015 'azure.messaging':429,614 'azure.messaging.eventgrid':33,59,147,166,580,995,1002 'azure.messaging.eventgrid.namespaces':67,431,1003,1009 'azure.messaging.eventgrid.systemevents':722 'azurekeycredenti':157,190,216,441,494 'azuresascredenti':195 'bash':49,82 'batch':238,303,461,835,952 'best':822 'binarydata.fromstring':661,699 'blob':682 'blobcreat':680,726 'blobcreated.url':684 'blobdelet':728 'bob':478 'boundari':1110 'break':685 'broker':785 'brokerproperti':787 'call':842 'cannot':565 'case':678 'catch':532,913,924,936,953,975 'check':922,933 'clarif':1104 'class':587,618 'clear':1077 'client':11,35,114,149,168,198,210 'client.sendeventasync':236,301,415,911 'client.sendeventsasync':275,324,381 'cloudev':30,70,125,133,277,280,281,302,305,307,310,317,325,446,447,459,466,473,515,516,610,626,627,694,696,697,702,703,705,774,775,797,826,828,912 'cloudevent.data':529,643 'cloudevent.data.toobjectfromjson':708 'cloudevent.id':295 'cloudevent.parsemany':698 'cloudevent.source':640 'cloudevent.subject':293 'cloudevent.time':298 'cloudevent.type':527,637,711 'cloudeventfunct':619 'cloudnat':69 'cncf':802 'common':717 'comparison':794 'configur':869,889 'console.writeline':525,681,709,919,930,942,956 'consum':16,572 'contain':740 'containerregistryimagepushedeventdata':743 'context':629 'context.getlogger':632 'count':791 'creat':683 'credenti':923 'criteria':1113 'cross':820 'cross-platform':819 'csharp':143,162,180,208,279,331,385,425,483,561,578,612,648,695,716,906,964 'current':76 'custom':383,688 'customdata':691 'customseri':395 'customserializer.serialize':409 'data':229,252,267,287,352,371,408,528,608,642,707,712,713,809,901 'datavers':227,250,265,350,369,406,808 'datetimeoffset.utcnow':299 'datetimeoffset.utcnow.addhours':187 'dead':559,887,891 'dead-lett':886,890 'defaultazurecredenti':176 'deliv':861 'deliveri':55,63,100,117,129,418,780,790,1005,1043 'describ':1065,1081 'detail':512 'detail.brokerproperties.locktoken':520 'detail.event':517 'devicecr':749 'domain':45,53,330,339,360 'dotnet':4,56,64,72,999,1006,1012,1020 'driven':26 'effici':844 'egev':221,237,400,416,665 'egevent.data.toobjectfromjson':692 'egevent.trygetsystemeventdata':669 'els':686 'employe':449 'employee.created':451 'endpoint':84,88,97,104 'entra':159,847 'environ':80,1093 'environment-specif':1092 'error':904,959 'event':6,17,20,25,39,42,85,92,101,106,110,205,219,240,242,276,328,332,342,382,421,445,482,497,524,526,542,549,558,563,573,601,635,645,654,659,667,675,689,715,719,724,730,737,742,747,770,783,792,836,839,858,867,876,882,895,900,949,957,974,989 'event-driven':24 'eventgrid':3 'eventgrid.azure.net':90,105 'eventgrid.azure.net/api/events':89 'eventgridev':32,121,206,220,245,260,345,364,399,576,596,597,647,658,664,769,796 'eventgridevent.data':609 'eventgridevent.eventtype':603 'eventgridevent.parsemany':660 'eventgridevent.subject':606 'eventgridfunct':588 'eventgridpublishercli':119,148,167,197,209,755,969,984 'eventgridpublisherclient.buildsharedaccesssignature':183 'eventgridreceivercli':134,487,764 'eventgridsendercli':131,435,759 'eventgridtrigg':595,625 'eventtyp':225,248,263,348,367,404,807 'ex':915,926,938,955 'ex.message':961 'ex.status':917,928,940,960 'except':533 'execut':1060 'expert':1098 'extens':812,814 'fail':894,921,932 'failov':962,977 'failur':880 'featur':795 'field':805 'foreach':510,663,701 'function':575,620,1018 'functioncontext':628 'functionnam':589 'github':1047 'github.com':1050 'github.com/azure/azure-sdk-for-net/tree/main/sdk/eventgrid/azure.messaging.eventgrid':1049 'grid':7,21,43,86,93,102,107,111,329,655,771,958 'guid.newguid':296 'handl':673,687,878,905 'handler':857 'hierarchi':115 'hub':746 'id':160,848 'idempot':856 'ident':851 'ienumer':123,127 'ilogg':598 'imagepush':744 'implement':831 'individu':883 'industri':832 'input':1107 'instal':48,994 'interop':71 'interoper':816 'inventori':378 'inventory-top':377 'inventory.updated':368 'inventory/item-1':366 'iot':745 'iothubdevicecreatedeventdata':748 'item':374 'itemid':373 'john':454 'json':650,653,662,700 'jsonnamingpolicy.camelcase':393 'jsonobjectseri':397 'jsonserializeropt':391 'key':95,141,750,854 'larg':945 'learn.microsoft.com':1036,1040,1045 'learn.microsoft.com/azure/event-grid/custom-event-quickstart':1039 'learn.microsoft.com/azure/event-grid/pull-delivery-overview':1044 'learn.microsoft.com/dotnet/api/azure.messaging.eventgrid':1035 'letter':560,888,892 'librari':12,36 'limit':813,1069 'link':1025 'list':241,306,341,504,507 'live':873 'lock':788 'locktoken':519,531,538,571 'locktokenstoack':505,547 'locktokenstoack.add':530 'locktokenstoack.any':544 'locktokenstoreleas':508,556 'locktokenstorelease.add':537 'locktokenstorelease.any':553 'log':599 'log.loginformation':600,604,607 'logger':631 'logger.loginformation':634,638,641 'manag':850 'match':1078 'max':946 'maxev':502 'may':859 'messag':29 'microsoft':158 'microsoft.azure.functions.worker':616 'microsoft.azure.messaging.eventgrid.cloudnativecloudevents':75 'microsoft.azure.webjobs':582 'microsoft.azure.webjobs.extensions.eventgrid':584,1016,1023 'miss':1115 'multipl':838 'must':333 'mytopic.eastus-1.eventgrid.azure.net':154,173 'mytopic.eastus-1.eventgrid.azure.net/api/events':153,172 'name':109,113,362,453,470,477 'namespac':47,61,96,103,130,419,423,762,767,875 'namespaceendpoint':438,490 'nativ':772 'net':10,34 'new':150,151,156,169,170,175,184,189,194,199,200,211,212,215,222,230,243,244,253,259,268,282,288,308,309,313,316,320,343,344,353,363,372,390,396,401,410,434,436,440,448,452,464,465,469,472,476,486,488,493,506,509,570,830,968,983 'nuget':1028 'object':671 'one':841 'order':358 'order.created':226,249,264,286,312,349,405 'order.updated':319 'orderdata':254,269,411 'orderid':231,255,270,289,314,321,354,412 'orders-top':357 'orders/12345':224,247,294,347,403 'orders/12346':262 'output':1087 'overview':1068 'packag':58,66,74,1001,1008,1014,1022,1029 'pars':644,646,693 'partial':879 'pattern':963 'payload':657,943 'per':948 'permiss':935,1108 'platform':821 'practic':823 'prefer':827,849 'primarycli':967 'primaryclient.sendeventsasync':973 'primarykey':971 'primaryuri':970 'process':481,522,541,567,903 'processcloudev':621,633 'processeventgridev':590 'properti':337,786 'propertynamingpolici':392 'pub/sub':28 'public':585,591,617,622 'publish':14,38,204,326,756 'pull':62,99,128,417,779,1004,1042 'purpos':754,993 'push':54,116 'quickstart':1038 'rbac':934 'receiv':479,496,765 'receiveasync':135 'receivedetail':511,782 'receivercli':485 'receiverclient.acknowledgeasync':546 'receiverclient.receiveasync':501 'receiverclient.rejectasync':569 'receiverclient.releaseasync':555 'receiveresult':498,778 'recommend':161 'refer':752,1024,1034 'region':980 'registri':741 'reject':557,562 'rejectasync':138 'relat':990 'releas':534,548 'releaseasync':137 'requestfailedexcept':914,925,937,954,976 'requir':804,1106 'resourc':729,1026 'resourcecr':732 'resourcedelet':734 'resourcedeletesuccesseventdata':733 'resourcewritesuccesseventdata':731 'respons':781 'result':499 'result.details':514 'retri':536,551 'review':1099 'rout':340 'run':594,624 'safeti':1109 'sas':177 'sascredenti':193,203 'sastoken':182,196 'schema':207,278,773,777,793,898 'scope':1080 'sdk':8,992,998 'sdks':991 'secondari':979 'secondarycli':982 'secondaryclient.sendeventsasync':988 'secondarykey':986 'secondaryuri':985 'send':420,443,460,760,837 'sendasync':132 'sendercli':433 'senderclient.sendasync':458,463 'sendeventasync':120,124 'sendeventsasync':122,126 'serial':384 'serializeropt':389,398 'servic':736 'set':866 'singl':218,444 'skill':1056,1072 'skill-azure-eventgrid-dotnet' 'sourc':283,450,467,474,639,810,1048 'source-sickn33' 'specif':801,1094 'specifi':334 'stabl':79 'standard':798,803,833 'static':586,592 'stop':1100 'storag':723 'storageblobcreatedeventdata':679,725 'storageblobdeletedeventdata':727 'string':181,518,651,652 'subject':223,246,261,346,365,402,605,806 'subscript':112,768 'subscriptionnam':492 'substitut':1090 'success':540,1112 'switch':676 'system':674,714,718 'system.text.json':387 'systemev':672,677 'task':1076 'test':1096 'time':871 'time-to-l':870 'token':178,789 'topic':44,51,87,94,108,336,356,359,361,376,379,424,763 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'topic/domain':83 'topicendpoint':186,202,214 'topickey':191,217,442,495 'topicnam':439,491 'topics/domains':118,758,996 'tostr':297 'total':951 'treat':1085 'tri':521,909,965 'trigger':577,611,1019 'ttl':868 'type':285,468,475,602,636,710,720,751,753,811 'uri':152,171,185,201,213,437,489 'url':1027 'use':22,144,146,163,165,386,426,428,430,579,581,583,613,615,721,825,846,885,907,1054,1070 'valid':897,899,1095 'var':192,388,394,432,484,630,690,706,966,981 'variabl':81 'version':77 'void':593,623 'webappupd':739 'webappupdatedeventdata':738 'webhook':656 'workflow':1062 'www.nuget.org':1031 'www.nuget.org/packages/azure.messaging.eventgrid':1030","prices":[{"id":"878a0f8a-860e-4e4e-aec5-5cdcea1cf980","listingId":"6c553e79-a5e3-4e20-a3f8-230d19f210a6","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:32:22.442Z"}],"sources":[{"listingId":"6c553e79-a5e3-4e20-a3f8-230d19f210a6","source":"github","sourceId":"sickn33/antigravity-awesome-skills/azure-eventgrid-dotnet","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-eventgrid-dotnet","isPrimary":false,"firstSeenAt":"2026-04-18T21:32:22.442Z","lastSeenAt":"2026-04-24T18:50:30.188Z"}],"details":{"listingId":"6c553e79-a5e3-4e20-a3f8-230d19f210a6","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"azure-eventgrid-dotnet","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34928,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-24T06:41:17Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"d04020511227537401f91bebddc6664c0578e5e3","skill_md_path":"skills/azure-eventgrid-dotnet/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-eventgrid-dotnet"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"azure-eventgrid-dotnet","description":"Azure Event Grid SDK for .NET. Client library for publishing and consuming events with Azure Event Grid. Use for event-driven architectures, pub/sub messaging, CloudEvents, and EventGridEvents."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-eventgrid-dotnet"},"updatedAt":"2026-04-24T18:50:30.188Z"}}