Example #1
0
        public OrderParameters ParseQuery(NameValueCollection queryStrings)
        {
            if (queryStrings == null || queryStrings.Count == 0)
            {
                return(null);
            }

            var orderParams = new OrderParameters();

            orderParams.CustomerId = queryStrings["CustomerId"];

            if (DateTime.TryParse(queryStrings["dateFrom"], out var fromDateTime))
            {
                orderParams.DateFrom = (DateTime?)fromDateTime;
            }
            else
            {
                orderParams.DateFrom = null;
            }

            if (DateTime.TryParse(queryStrings["dateTo"], out var toDateTime))
            {
                orderParams.DateFrom = (DateTime?)toDateTime;
            }
            else
            {
                orderParams.DateFrom = null;
            }

            if (int.TryParse(queryStrings["skip"], out var skipRes))
            {
                orderParams.Skip = skipRes;
            }
            else
            {
                orderParams.Skip = null;
            }

            if (int.TryParse(queryStrings["take"], out var takeRes))
            {
                orderParams.Skip = takeRes;
            }
            else
            {
                orderParams.Skip = null;
            }

            return(orderParams);
        }
Example #2
0
        public OrderParameters ParseBody(Stream inputStream)
        {
            using (var reader = new StreamReader(inputStream))
            {
                var data = reader.ReadToEnd().Split('&');

                var orderParams = new OrderParameters
                {
                    CustomerId = GetStringParameter("customerId", data),
                    DateFrom   = GetDateTimeParameter("dateFrom", data),
                    DateTo     = GetDateTimeParameter("dateTo", data),
                    Skip       = GetIntParameter("skip", data),
                    Take       = GetIntParameter("take", data)
                };

                return(orderParams);
            }
        }
Example #3
0
        public void Listen()
        {
            var listener = new HttpListener();

            listener.Prefixes.Add("http://+:55177/");
            listener.IgnoreWriteExceptions = true;
            listener.Start();
            do
            {
                var context = listener.GetContext();

                var    request  = context.Request;
                var    response = context.Response;
                string acceptType;
                var    orderParams = new OrderParameters();

                if (request.HttpMethod == "POST" && request.InputStream != null)
                {
                    orderParams = _parser.ParseBody(request.InputStream);
                }
                else
                {
                    var dataFromQuery = HttpUtility.ParseQueryString(request.Url.Query);
                    orderParams = _parser.ParseQuery(dataFromQuery);
                }

                if ((request.AcceptTypes == null) || (!request.AcceptTypes.Any()))
                {
                    acceptType = "unknown";
                }
                else
                {
                    acceptType = request.AcceptTypes.FirstOrDefault();
                }

                var data = GetData(orderParams);
                SendResponse(acceptType, data, response);
            } while (true);
        }
Example #4
0
        private List <OrderFields> GetData(OrderParameters orderParams)
        {
            DateTime dateFrom, dateTo;
            var      db = new Northwind();

            dateFrom = orderParams.DateFrom == null ? DateTime.MinValue : orderParams.DateFrom.Value;
            dateTo   = orderParams.DateTo == null? DateTime.MaxValue: orderParams.DateTo.Value;

            var orderInfo = new List <OrderFields>();

            if (orderParams.Take != null && orderParams.Skip != null)
            {
                var query = db.Orders.Include(o => o.Customer)
                            .Skip(orderParams.Skip.Value)
                            .Take(orderParams.Take.Value)
                            .Where(o => o.OrderDate > dateFrom && o.OrderDate < dateTo)
                            .OrderBy(o => o.OrderID)
                            .Select(o => new OrderFields
                {
                    Customer    = o.Customer.CompanyName,
                    OrderDate   = o.OrderDate,
                    Freight     = o.Freight,
                    ShipCountry = o.ShipCountry,
                    ShipName    = o.ShipName
                });
                orderInfo = query.ToList();
            }
            else
            {
                if (orderParams.Take == null && orderParams.Skip.HasValue)
                {
                    var query = db.Orders.Include(o => o.Customer)
                                .Skip(orderParams.Skip.Value)
                                .Where(o => o.OrderDate > dateFrom && o.OrderDate < dateTo)
                                .OrderBy(o => o.OrderID)
                                .Select(o => new OrderFields
                    {
                        Customer    = o.Customer.CompanyName,
                        OrderDate   = o.OrderDate,
                        Freight     = o.Freight,
                        ShipCountry = o.ShipCountry,
                        ShipName    = o.ShipName
                    });
                    orderInfo = query.ToList();
                }
                else
                {
                    if (orderParams.Skip == null && orderParams.Take.HasValue)
                    {
                        var query = db.Orders.Include(o => o.Customer)
                                    .Take(orderParams.Take.Value)
                                    .Where(o => o.OrderDate > dateFrom && o.OrderDate < dateTo)
                                    .OrderBy(o => o.OrderID)
                                    .Select(o => new OrderFields
                        {
                            Customer    = o.Customer.CompanyName,
                            OrderDate   = o.OrderDate,
                            Freight     = o.Freight,
                            ShipCountry = o.ShipCountry,
                            ShipName    = o.ShipName
                        });
                        orderInfo = query.ToList();
                    }
                    else
                    {
                        var query = db.Orders.Include(o => o.Customer)
                                    .Where(o => o.OrderDate > dateFrom && o.OrderDate < dateTo)
                                    .OrderBy(o => o.OrderID)
                                    .Select(o => new OrderFields
                        {
                            Customer    = o.Customer.CompanyName,
                            OrderDate   = o.OrderDate,
                            Freight     = o.Freight,
                            ShipCountry = o.ShipCountry,
                            ShipName    = o.ShipName
                        });
                        orderInfo = query.ToList();
                    }
                }
            }
            return(orderInfo);
        }