예제 #1
0
        private void EnsureExpectedResponseStatus(IRestResponse response, params HttpStatusCode[] expectedStatuses)
        {
            /*
             * ---------------------------
             * Error
             * ---------------------------
             *      An error occurred: An error has occurred.
             *
             *      API request returned an unexpected response: BadRequest (Bad Request) -- Expected one of OK
             *
             *       {"param":{"name":"workItem"},"cause":"HTTP 404 Not Found"}
             *
             * ---------------------------
             * OK
             * ---------------------------
             */

            _log.Debug(
                string.Format(
                    "Checking request status for {0} {1} \n\n {2}",
                    response.Request.Method,
                    response.Request.Resource,
                    response.Request.Parameters.Where(p => p.Type == ParameterType.UrlSegment)
                    .Aggregate(string.Empty, (str, parameter) => string.Format("{0}{1}={2}\n", str, parameter.Name, parameter.Value))));

            if (response.ResponseStatus != ResponseStatus.Completed)
            {
                _log.Error(string.Format("!!!! Response status = {0} !!!!", response.ResponseStatus), response.ErrorException);
                throw new ConnectionException(
                          string.Format("API request did not complete successfully.  ResponseStatus = {0}", response.ResponseStatus),
                          response.ErrorException);
            }
            if (!expectedStatuses.Contains(response.StatusCode))
            {
                _log.Warn(string.Format("Response returned an unexpected status = {0}", response.StatusCode));

                throw new HttpStatusCodeException(
                          response.AsApiResponse(),
                          string.Format(
                              "API request returned an unexpected response: {0} ({1}) -- Expected one of {2} \n\n {3}",
                              response.StatusCode,
                              response.StatusDescription,
                              expectedStatuses.Select(s => s.ToString()).Aggregate((s1, s2) => string.Format("{0} {1}", s1, s2)),
                              response.Content));
            }
        }