public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
        {
            string body = actionContext.Request.Content.ReadAsStringAsync().Result;
            MembershipCancellationParameterModel model = new MembershipCancellationParameterModel();

            model = JsonConvert.DeserializeObject <MembershipCancellationParameterModel>(body);

            // Get current membership to calidate existing status ..
            _membershipDataAccess =
                (IMembershipDataAccess)
                (actionContext.ControllerContext.Configuration.DependencyResolver as AutofacWebApiDependencyResolver)
                .GetService(typeof(IMembershipDataAccess));

            MembershipDetails membershipDetails =
                _membershipDataAccess.GetMembershipDetails <long, MembershipDetails>(model.MembershipNo ?? default(long));

            // Call new Generic DA method
            if (membershipDetails.MembershipNo.HasValue)
            {
                model.OriginalStatus = membershipDetails.MembershipStatus;
            }
            // GITCS-9 - cancellation reason
            model.ValidMembershipCancellationReasons =
                _membershipDataAccess.GetMembershipOptions("MEMBERSHIP_CANCEL_REASON").Where(mo => mo.CodeList == "MEMBERSHIP_CANCEL_REASON");

            var validator = new MembershipCancellationParameterModelValidator();
            var result    = validator.Validate(model);

            foreach (var e in result.Errors)
            {
                bindingContext.ModelState.AddModelError(e.PropertyName, e.ErrorMessage);
            }
            bindingContext.Model = model;
            return(true);
        }
        public IHttpActionResult CancelMembership(MembershipCancellationParameterModel membershipCancellationParameter)
        {
            try
            {
                // Use Injected mapper ...
                var mappedModel = _mapper.Map <MembershipCancellationParameterModel, MembershipDataInput>(membershipCancellationParameter);

                List <MembershipOutput> result = new List <MembershipOutput>();

                // Get indexed Cancellation writer part from DI container
                IStrategyWriterPart <MembershipDataInput, int, int, MembershipDetails> writerCancelationPart =
                    _membershipDetailsWriterParts[StrategyWriterPartImplementations.CancellMembershipWriterPart];

                result.Add(
                    new MembershipOutput()
                {
                    MembershipData = writerCancelationPart.Process(mappedModel)
                }
                    );

                return(Ok(result));
            }
            catch (Exception exception)
            {
                if (_logParameterValue)
                {
                    _logger.Error(
                        $"MembershipCancellation: ErrorTag: {ErrorTagProvider.ErrorTagDatabase} --  {exception.Message}");

                    _logger.Error(
                        $"Parameters MembershipLoad:- MembershipNo={membershipCancellationParameter.MembershipNo}, EncryptedMembershipNo={membershipCancellationParameter.EncryptedMembershipNo}"
                        );
                }

                return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.InternalServerError,
                                                                   exception.Message)));
            }
        }