public async Task <HttpResponseMessage> Post([FromBody] WebhookFeedFB data)
        {
            StreamReader reader  = new StreamReader(HttpContext.Current.Request.InputStream);
            string       json    = reader.ReadToEnd();
            bool         isValid = ValidateSignatureWithPayload(json, HttpContext.Current.Request.Headers["X-Hub-Signature"], this.appSecret);

            if (isValid)
            {
                await SendDataAsync(data);

                return(new HttpResponseMessage(HttpStatusCode.OK));
            }

            return(new HttpResponseMessage(HttpStatusCode.BadRequest));
        }
        /// <summary>
        /// convert facebook data to table object
        /// </summary>
        /// <param name="data">the data comng from server</param>
        /// <returns>Table object</returns>
        private async Task SendDataAsync(WebhookFeedFB data)
        {
            string jobId;

            foreach (Entry entry in data.Entry)
            {
                if (PageJobMapping.ContainsKey(entry.Id))
                {
                    jobId = PageJobMapping[entry.Id].RowKey;
                }
                else
                {
                    Trace.TraceInformation($"Page Id: {entry.Id}");
                    Expression <Func <PageJobEntity, bool> > filter = (entity => entity.PartitionKey == entry.Id);
                    PageJobMappingTable = azureTableProvider.GetAzureTableReference(Settings.PageJobMappingTableName);
                    List <PageJobEntity> pageJobEntityList = await azureTableProvider.QueryEntitiesAsync <PageJobEntity>(PageJobMappingTable, filter);

                    Trace.TraceInformation($"Fetched entries from Table: {pageJobEntityList.Count}");
                    PageJobEntity pageJobEntity = pageJobEntityList?[0];
                    PageJobMapping.Add(pageJobEntity?.PartitionKey, pageJobEntity);
                    jobId = pageJobEntity?.RowKey;
                }

                foreach (Change change in entry.Changes)
                {
                    if (change.Value != null && change.Value.PostId != null)
                    {
                        await eventApiClient.OnWebhookEvent(Settings.TenantId, jobId, $"{change.Value?.CreatedTime}", $"{change.Value?.PostId}", "update");
                    }
                    else
                    {
                        Trace.TraceWarning("No post id");
                    }
                }
            }
        }
コード例 #3
0
 public void DataModelTestFBWebhook()
 {
     // Message Comment by Page
     string        data    = File.ReadAllText(@"FakeData\FakeWebhookFeedData.json");
     WebhookFeedFB webhook = JsonConvert.DeserializeObject <WebhookFeedFB>(data);
 }