Example #1
0
        public IHttpActionResult PostTotalCost(TotalCostWEB totalCostWEB)
        {
            // Получим все заголовки запроса:
            ShowAllHeaders();

            // отправка статусного кода 400
            if (totalCostWEB == null)
            {
                return(BadRequest());
            }

            //----------   обработка частных случаев валидации  ----------------->>
            //
            if (totalCostWEB.volumeCost.TownFromId == totalCostWEB.volumeCost.TownToId)
            {
                ModelState.AddModelError("TownToId", "Город отправления не может совпадать с городом получения");
            }


            // Все ошибки валидаци сохраняются в объекте ModelState, который передается в метод BadRequest и,
            // таким образом, отправляется клиенту вместе с ошибкой 400.
            //
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            // costService.PostTotalCost()
            //
            decimal totalCost = 0;

            try
            {
                Mapper.Initialize(cfg =>
                {
                    cfg.CreateMap <VolumeCostWEB, VolumeCostDTO>();
                    cfg.CreateMap <LathingCostWEB, LathingCostDTO>();
                    cfg.CreateMap <AddServiceCostWEB, AddServiceCostDTO>();
                    cfg.CreateMap <PickUpCostWEB, PickUpCostDTO>();
                });

                var volumeCostDTO     = Mapper.Map <VolumeCostWEB, VolumeCostDTO>(totalCostWEB.volumeCost);
                var lathingCostDTO    = Mapper.Map <LathingCostWEB, LathingCostDTO>(totalCostWEB.lathingCost);
                var addServiceCostDTO = Mapper.Map <AddServiceCostWEB, AddServiceCostDTO>(totalCostWEB.addServiceCost);
                var pickUpFromCostDTO = Mapper.Map <PickUpCostWEB, PickUpCostDTO>(totalCostWEB.pickUpFromCost);
                var pickUpToCostDTO   = Mapper.Map <PickUpCostWEB, PickUpCostDTO>(totalCostWEB.pickUpToCost);

                totalCost = CostService.PostTotalCost(volumeCostDTO, lathingCostDTO, addServiceCostDTO, pickUpFromCostDTO, pickUpToCostDTO);
            }
            catch (ValidationException x)
            {
                ModelState.AddModelError(x.Property, x.Message);
                return(BadRequest(ModelState));
            }
            catch (Exception x)
            {
                ModelState.AddModelError("common", x.Message);
                return(BadRequest(ModelState));
            }
            //
            //----------   обработка частных случаев валидации  -----------------//


            //++ Add output data to Headers collection
            string s_output = string.Format("x-costService.PostTotalCost({0},{1},{2},{3})",
                                            totalCostWEB.volumeCost.TownFromId, totalCostWEB.volumeCost.TownToId, totalCostWEB.volumeCost.Weight, totalCostWEB.volumeCost.Volume);

            System.Web.HttpContext.Current.Response.Headers.Add(s_output, totalCost.ToString());

            Trace.WriteLine(s_output + " = " + totalCost);

            return(Ok(totalCost));
        }