public ActionResult Index() { if (User.Identity.IsAuthenticated) { // Get user's id for token cache. ViewBag.CurrentUserId = User.FindFirst(Startup.ObjectIdentifierType)?.Value; //Store the notifications in session state. A production //application would likely queue for additional processing. //Store the notifications in application state. A production //application would likely queue for additional processing. ConcurrentBag <Notification> notificationArray = NotificationsStore.GetNotifications(); if (notificationArray == null) { notificationArray = new ConcurrentBag <Notification>(); } NotificationsStore.SaveNotifications(notificationArray); return(View(notificationArray)); } return(View()); }
public ActionResult Listen() { StringValues queryValues; // Validate the new subscription by sending the token back to Microsoft Graph. // This response is required for each subscription. if (Request.Query.TryGetValue("validationToken", out queryValues)) { string token = queryValues.First(); return(Content(token, "plain/text")); } // Parse the received notifications. else { try { using (var inputStream = new System.IO.StreamReader(Request.Body)) { JObject jsonObject = JObject.Parse(inputStream.ReadToEnd()); if (jsonObject != null) { // Notifications are sent in a 'value' array. The array might contain multiple notifications for events that are // registered for the same notification endpoint, and that occur within a short time span. JArray value = JArray.Parse(jsonObject["value"].ToString()); foreach (var notification in value) { Notification current = JsonConvert.DeserializeObject <Notification>(notification.ToString()); // Check client state to verify the message is from Microsoft Graph. SubscriptionStore subscription = SubscriptionStore.GetSubscriptionInfo(current.SubscriptionId); // This sample only works with subscriptions that are still cached. if (subscription != null) { if (current.ClientState == subscription.ClientState) { //Store the notifications in application state. A production //application would likely queue for additional processing. ConcurrentBag <Notification> notificationArray = NotificationsStore.GetNotifications(); if (notificationArray == null) { notificationArray = new ConcurrentBag <Notification>(); } notificationArray.Add(current); NotificationsStore.SaveNotifications(notificationArray); //TempData["notifications"] = JsonConvert.SerializeObject(notificationArray); } } } } } } catch (Exception) { // TODO: Handle the exception. // Still return a 202 so the service doesn't resend the notification. } return(new StatusCodeResult(202)); } }