public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequestMessage req, TraceWriter log)
        {
            log.Info("Getting swipe records");

            // Serial Number
            int serialNumber = 0;

            foreach (string s in req.Headers.GetValues("X-M46-RFID-SN"))
            {
                serialNumber = int.Parse(s);
            }

            // IP
            string ip = "";

            foreach (string i in req.Headers.GetValues("X-M46-RFID-IP"))
            {
                ip = i;
            }

            // Port
            int port = 60000;

            foreach (string p in req.Headers.GetValues("X-M46-RFID-PORT"))
            {
                port = int.Parse(p);
            }

            var controller = new wgMjController
            {
                ControllerSN = serialNumber,
                IP           = ip,
                PORT         = port
            };

            DataTable dtSwipeRecords = new DataTable("SwipeRecords");

            dtSwipeRecords.Columns.Add("f_Index", System.Type.GetType("System.UInt32"));
            dtSwipeRecords.Columns.Add("f_ReadDate", System.Type.GetType("System.DateTime"));
            dtSwipeRecords.Columns.Add("f_CardNO", System.Type.GetType("System.UInt32"));
            dtSwipeRecords.Columns.Add("f_DoorNO", System.Type.GetType("System.UInt32"));
            dtSwipeRecords.Columns.Add("f_InOut", System.Type.GetType("System.UInt32"));
            dtSwipeRecords.Columns.Add("f_ReaderNO", System.Type.GetType("System.UInt32"));
            dtSwipeRecords.Columns.Add("f_EventCategory", System.Type.GetType("System.UInt32"));
            dtSwipeRecords.Columns.Add("f_ReasonNo", System.Type.GetType("System.UInt32"));
            dtSwipeRecords.Columns.Add("f_ControllerSN", System.Type.GetType("System.UInt32"));
            dtSwipeRecords.Columns.Add("f_RecordAll", System.Type.GetType("System.String"));

            var passes = new List <Pass>();

            int num = -1;

            await Task.Run(() =>
            {
                using (wgMjControllerSwipeOperate swipe4GetRecords = new wgMjControllerSwipeOperate())
                {
                    swipe4GetRecords.Clear();
                    num = swipe4GetRecords.GetSwipeRecords(controller.ControllerSN, controller.IP, controller.PORT, ref dtSwipeRecords);
                }
                Console.WriteLine($"Got {num} records");

                if (num > 0)
                {
                    wgMjControllerSwipeRecord mjrec = new wgMjControllerSwipeRecord();
                    for (int i = 0; i < num; i++)
                    {
                        mjrec.Update(dtSwipeRecords.Rows[i]["f_RecordAll"] as string);
                        log.Info(mjrec.CardID.ToString());
                        var pass = new Pass
                        {
                            id           = (int)mjrec.CardID,
                            readerNumber = mjrec.DoorNo,
                            readDate     = mjrec.ReadDate,
                            direction    = mjrec.IsEnterIn ? "in" : "out"
                        };
                        passes.Add(pass);
                    }
                }
            });

            if (num < 0)
            {
                return(req.CreateResponse(HttpStatusCode.InternalServerError, "Unable to get records"));
            }

            return(req.CreateResponse(HttpStatusCode.OK, passes, JsonMediaTypeFormatter.DefaultMediaType));
        }