public ReserveRoomResponse Execute(ReserveRoomRequest request)
        {
            var response = new ReserveRoomResponse();

            try
            {
                // Get mailbox info
                var requestMailboxInfo = new GetMailboxInfo.GetMailboxInfoRequest(
                    email: request.MailboxEmail);
                var responseMailboxInfo = new GetMailboxInfo().Execute(requestMailboxInfo);
                if (!responseMailboxInfo.Success) {
                    response.ErrorMessage = responseMailboxInfo.ErrorMessage;
                    return response;
                }

                // Connect to Exchange
                var service = ExchangeServiceConnector.GetService(request.MailboxEmail);

                var mbx = new Mailbox(request.MailboxEmail);
                FolderId fid = new FolderId(WellKnownFolderName.Calendar, mbx);

                //CalendarFolder calendar = CalendarFolder.Bind(service, fid, new PropertySet(FolderSchema.ManagedFolderInformation, FolderSchema.ParentFolderId, FolderSchema.ExtendedProperties));

                // Create appointment
                var appointment = new Appointment(service);

                appointment.Subject = "Impromptu Meeting";
                appointment.Body = "Booked via Conference Room app.";
                appointment.Start = DateTime.Now;
                appointment.End = DateTime.Now.AddMinutes(request.BookMinutes);
                appointment.Location = responseMailboxInfo.DisplayName;
                appointment.Save(fid, SendInvitationsMode.SendToNone);

                // Verify saved
                Item item = Item.Bind(service, appointment.Id, new PropertySet(ItemSchema.Subject));
                if (item == null)
                {
                    response.ErrorMessage = "Error saving appointment to calendar.";
                    return response;
                }
                else
                {
                    response.AppointmentId = appointment.Id;
                    response.Success = true;
                }
            }
            catch (Exception e)
            {
                response.ErrorMessage = e.ToString();
                return response;
            }

            return response;
        }
        // GET: /exchange/[email protected]
        private Func<dynamic, dynamic> GetMailbox()
        {
            return p =>
            {
                var request = new GetMailboxInfo.GetMailboxInfoRequest(
                    email: Request.Query.email);
                var response = new GetMailboxInfo().Execute(request);

                return Response.AsJson(response);
            };
        }