예제 #1
0
        public IHttpActionResult PostSearchLine
        (
            [DateTimeRangeValidate]
            string dateRange = "",
            string line      = "",
            [OrderByValidate]
            string orderBy = "ASC",
            string type    = "JOSN"
        )
        {
            DateTime fromDateTime;
            DateTime toDateTime;
            var      isValidate = ParserHandler.Instance.ParserDateTimeRange(dateRange, out fromDateTime, out toDateTime);

            if (!isValidate)
            {
                return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Error: date time range input not expected")));
            }

            var criteria = new Criteria()
            {
                FromDateTime = fromDateTime != DateTime.MinValue ? fromDateTime : (DateTime?)null,
                ToDateTime   = toDateTime != DateTime.MaxValue ? toDateTime : (DateTime?)null,
                LineName     = line,
                OrderBy      = orderBy
            };

            string message;

            if (!criteria.CheckCriteriaValid(out message))
            {
                return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.BadRequest, message)));
            }

            try
            {
                var routes = dao.FindRoute(criteria);

                var formatters = string.Compare(type.ToUpper(), "JSON") == 0 ? (MediaTypeFormatter)Configuration.Formatters.JsonFormatter :
                                 string.Compare(type.ToUpper(), "XML") == 0 ? (MediaTypeFormatter)Configuration.Formatters.XmlFormatter :
                                 (MediaTypeFormatter)Configuration.Formatters.JsonFormatter;

                // let caller handle the result if the result was empty
                return(Content(HttpStatusCode.OK, routes, formatters));
            }
            catch (Exception ex)
            {
                return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message)));
            }
        }