public MixpanelHttpApiErrorException(ApiCallResult result, string message, Exception innerException)
     : base(message, innerException)
 {
     this.Result = result;
 }
        protected virtual ApiCallResult HandleResponse(HttpWebRequest request, IAsyncResult result = null)
        {
            HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result);

            using (Stream stream = response.GetResponseStream())
            {
                using (StreamReader reader = new StreamReader(stream))
                {
                    String content = reader.ReadToEnd();
                    if (String.IsNullOrWhiteSpace(content))
                    {
                        throw new MixpanelHttpApiErrorException("No result returned");
                    }
                    else if (content == "1")
                    {
                        // we're good
                        return(new ApiCallResult()
                        {
                            Status = 1, IsSuccess = true, RawResult = content
                        });
                    }
                    else if (content == "0")
                    {
                        throw new MixpanelHttpApiErrorException(new ApiCallResult()
                        {
                            Status = 0, IsSuccess = false, RawResult = content
                        }, "Error returned from MixPanel without details");
                    }
                    else
                    {
                        ApiCallResult callResult = null;
                        try
                        {
                            callResult = JsonConvert.DeserializeObject <ApiCallResult>(content);
                        }
                        catch (Exception e)
                        {
                        }
                        if (callResult == null)
                        {
                            return(new ApiCallResult()
                            {
                                Status = 0, IsSuccess = false, RawResult = content
                            });
                        }
                        else if (callResult.Status == 1)
                        {
                            callResult.IsSuccess = true;
                            callResult.RawResult = content;
                            return(callResult);
                        }
                        else
                        {
                            callResult.IsSuccess = false;
                            callResult.RawResult = content;
                            throw new MixpanelHttpApiErrorException(callResult, "Error returned from MixPanel");
                        }
                    }
                }
            }
        }
 public MixpanelHttpApiErrorException(ApiCallResult result)
     : base()
 {
     this.Result = result;
 }