This repository has been archived by the owner on Oct 13, 2021. It is now read-only.
Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
event-grid-dotnet-publish-consume-events/EventGridConsumer/EventGridConsumer/Function1.cs
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
82 lines (74 sloc)
3.85 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//---------------------------------------------------------------------------------- | |
// Microsoft Azure EventGrid Team | |
// | |
// Copyright (c) Microsoft Corporation. All rights reserved. | |
// | |
// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, | |
// EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES | |
// OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. | |
//---------------------------------------------------------------------------------- | |
// The example companies, organizations, products, domain names, | |
// e-mail addresses, logos, people, places, and events depicted | |
// herein are fictitious. No association with any real company, | |
// organization, product, domain name, email address, logo, person, | |
// places, or events is intended or should be inferred. | |
//---------------------------------------------------------------------------------- | |
using System.Net; | |
using System.Net.Http; | |
using System.Threading.Tasks; | |
using Microsoft.Azure.EventGrid; | |
using Microsoft.Azure.EventGrid.Models; | |
using Microsoft.Azure.WebJobs; | |
using Microsoft.Azure.WebJobs.Extensions.Http; | |
using Microsoft.Azure.WebJobs.Host; | |
using Newtonsoft.Json; | |
// This captures the "Data" portion of an EventGridEvent on a custom topic | |
class ContosoItemReceivedEventData | |
{ | |
[JsonProperty(PropertyName = "itemSku")] | |
public string ItemSku { get; set; } | |
} | |
namespace EventGridConsumer | |
{ | |
public static class Function1 | |
{ | |
[FunctionName("Function1")] | |
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log) | |
{ | |
log.Info($"C# HTTP trigger function begun"); | |
string response = string.Empty; | |
const string CustomTopicEvent = "Contoso.Items.ItemReceived"; | |
string requestContent = await req.Content.ReadAsStringAsync(); | |
log.Info($"Received events: {requestContent}"); | |
EventGridSubscriber eventGridSubscriber = new EventGridSubscriber(); | |
eventGridSubscriber.AddOrUpdateCustomEventMapping(CustomTopicEvent, typeof(ContosoItemReceivedEventData)); | |
EventGridEvent[] eventGridEvents = eventGridSubscriber.DeserializeEventGridEvents(requestContent); | |
foreach (EventGridEvent eventGridEvent in eventGridEvents) | |
{ | |
if (eventGridEvent.Data is SubscriptionValidationEventData) | |
{ | |
var eventData = (SubscriptionValidationEventData)eventGridEvent.Data; | |
log.Info($"Got SubscriptionValidation event data, validationCode: {eventData.ValidationCode}, validationUrl: {eventData.ValidationUrl}, topic: {eventGridEvent.Topic}"); | |
// Do any additional validation (as required) such as validating that the Azure resource ID of the topic matches | |
// the expected topic and then return back the below response | |
var responseData = new SubscriptionValidationResponse() | |
{ | |
ValidationResponse = eventData.ValidationCode | |
}; | |
return req.CreateResponse(HttpStatusCode.OK, responseData); | |
} | |
else if (eventGridEvent.Data is StorageBlobCreatedEventData) | |
{ | |
var eventData = (StorageBlobCreatedEventData)eventGridEvent.Data; | |
log.Info($"Got BlobCreated event data, blob URI {eventData.Url}"); | |
} | |
else if (eventGridEvent.Data is ContosoItemReceivedEventData) | |
{ | |
var eventData = (ContosoItemReceivedEventData)eventGridEvent.Data; | |
log.Info($"Got ContosoItemReceived event data, item SKU {eventData.ItemSku}"); | |
} | |
} | |
return req.CreateResponse(HttpStatusCode.OK, response); | |
} | |
} | |
} |