public void Post(string apiRoute, ApiRequestContext context, int timeout)
        {
            var request = System.Net.WebRequest.Create(_domain + '/' + apiRoute);

            request.Method      = "POST";
            request.ContentType = "application/json";
            request.Timeout     = timeout;

            using (var sw = new System.IO.StreamWriter(request.GetRequestStream()))
            {
                var serializer = new JsonSerializer();
                serializer.Serialize(sw, context);
            }

            var ts = new System.Threading.ThreadStart(() => {
                try
                {
                    var response = request.GetResponse() as System.Net.HttpWebResponse;
                    using (var stream = response.GetResponseStream())
                    {
                        using (var reader = new System.IO.StreamReader(stream, Encoding.UTF8))
                        {
                            var responseString = reader.ReadToEnd();
                            var responseObject = JObject.Parse(responseString);

                            Code    = responseObject.Get <int>("Code");
                            Message = responseObject.Get <string>("Message");
                            if (Code >= 0)
                            {
                                Value = responseObject.SelectToken("Value");
                            }
                        }
                    }
                }
                catch (Exception e)
                {
                    Code    = -505;
                    Message = e.Message;
                }
                finally
                {
                    Responsed?.Invoke(this);
                }

                if (Code < 0)
                {
                    ResponseError?.Invoke(this);
                }
                else
                {
                    ResponseOK?.Invoke(this);
                }
            });

            new System.Threading.Thread(ts).Start();
        }
        public void Execute()
        {
            try
            {
                using (var sw = new System.IO.StreamWriter(_request.GetRequestStream()))
                {
                    var serializer = new JsonSerializer();
                    serializer.Serialize(sw, _context);
                }
                var response = _request.GetResponse() as System.Net.HttpWebResponse;
                using (var stream = response.GetResponseStream())
                {
                    using (var reader = new System.IO.StreamReader(stream, Encoding.UTF8))
                    {
                        var responseString = reader.ReadToEnd();
                        var responseObject = JObject.Parse(responseString);

                        Code    = responseObject.Get <int>("Code");
                        Message = responseObject.Get <string>("Message");
                        if (Code >= 0)
                        {
                            Value = responseObject.SelectToken("Value");
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Code    = -505;
                Message = e.Message;
            }
            finally
            {
                Responsed?.Invoke(this);
            }

            if (Code < 0)
            {
                ResponseError?.Invoke(this);
            }
            else
            {
                ResponseOK?.Invoke(this);
            }
        }