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); }
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); } }
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); }
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); }