예제 #1
0
        private M2XResponse CreateResponse(string path, M2XClientMethod method, object parms, object addBodyParms)
        {
            bool   isGetOrDelete = method == M2XClientMethod.GET || method == M2XClientMethod.DELETE;
            string url           = BuildUrl(path, isGetOrDelete || addBodyParms != null ? parms : null);
            string content       = isGetOrDelete ? null : SerializeData(addBodyParms ?? parms);

            return(new M2XResponse(new Uri(url), method, content));
        }
예제 #2
0
        /// <summary>
        /// Performs async M2X API request
        /// </summary>
        /// <param name="path">API path</param>
        /// <param name="method">HTTP method</param>
        /// <param name="parms">Query string (for GET and DELETE) or body (for POST and PUT) parameters</param>
        /// <param name="addBodyParms">Additional body parameters, if specified, the parms will be treated as query parameters. The passed object will be serialized into a JSON string. In case of a string passed it will be treated as a valid JSON string.</param>
        /// <returns>M2XResponse - The API response, see M2X API docs for details</returns>
        public async Task <M2XResponse> MakeRequest(
            string path, M2XClientMethod method = M2XClientMethod.GET, object parms = null, object addBodyParms = null)
        {
            M2XResponse       result = CreateResponse(path, method, parms, addBodyParms);
            CancellationToken ct     = this.cancellationToken;

            try
            {
                HttpResponseMessage responseMessage;
                switch (method)
                {
                case M2XClientMethod.POST:
                    responseMessage = ct == CancellationToken.None
                                                        ? await this.client.PostAsync(result.RequestUri, result.GetContent())
                                                        : await this.client.PostAsync(result.RequestUri, result.GetContent(), ct);

                    break;

                case M2XClientMethod.PUT:
                    responseMessage = ct == CancellationToken.None
                                                        ? await this.client.PutAsync(result.RequestUri, result.GetContent())
                                                        : await this.client.PutAsync(result.RequestUri, result.GetContent(), ct);

                    break;

                case M2XClientMethod.DELETE:
                    responseMessage = ct == CancellationToken.None
                                                        ? await this.client.DeleteAsync(result.RequestUri)
                                                        : await this.client.DeleteAsync(result.RequestUri, ct);

                    break;

                default:
                    responseMessage = ct == CancellationToken.None
                                                        ? await this.client.GetAsync(result.RequestUri)
                                                        : await this.client.GetAsync(result.RequestUri, ct);

                    break;
                }
                if (ct != CancellationToken.None)
                {
                    ct.ThrowIfCancellationRequested();
                }
                await result.SetResponse(responseMessage);
            }
            catch (OperationCanceledException)
            {
                throw;
            }
            catch (Exception ex)
            {
                result.WebError = ex;
            }
            this.lastResponse = result;
            return(result);
        }
예제 #3
0
 internal M2XResponse(Uri url, M2XClientMethod method, string content)
 {
     this.RequestUri     = url;
     this.RequestMethod  = method;
     this.RequestContent = content;
 }
예제 #4
0
 public Task <M2XResponse> MakeRequest(
     string path = null, M2XClientMethod method = M2XClientMethod.GET, object parms = null, object addBodyParms = null)
 {
     return(this.Client.MakeRequest(BuildPath(path), method, parms, addBodyParms));
 }
예제 #5
0
        protected dynamic MakeRequest(string url, M2XClientMethod method = M2XClientMethod.GET, object data = null, object queryParams = null)
        {
            string queryString = queryParams == null ? null : ObjectToQueryString(queryParams);
            string fullUrl = BuildUrl(url) + (String.IsNullOrEmpty(queryString) ? "" : ("?" + queryString));
            var request = (HttpWebRequest)WebRequest.Create(fullUrl);
            request.Method = method.ToString();
            request.ContentType = "application/json";
            request.Headers["X-M2X-KEY"] = apiKey;
            request.UserAgent = UserAgent;

            if (data != null && (method == M2XClientMethod.POST || method == M2XClientMethod.PUT))
            {
                using (var streamWriter = new StreamWriter(request.GetRequestStream()))
                {
                    streamWriter.Write(SerializeData(data));
                }
            }

            try
            {
                using (var response = (HttpWebResponse)request.GetResponse())
                {
                    if (response.StatusCode == HttpStatusCode.NoContent)
                        return null;

                    dynamic jsonObject = GetJsonObjFromResponse(fullUrl, response);

                    if (response.StatusCode != HttpStatusCode.OK && response.StatusCode != HttpStatusCode.Created)
                    {
                        throw new M2XAPIException(fullUrl, response.StatusCode, jsonObject == null ? null : jsonObject.message, jsonObject == null ? null : jsonObject.errors);
                    }

                    return jsonObject;
                }
            }catch(WebException ex)
            {
                if (ex.Response == null)
                    throw new M2XAPIException(fullUrl, (HttpStatusCode)0, "WebException - status:" + ex.Status + "; Message: " + ex.Message, null);

                using (var response = (HttpWebResponse)ex.Response)
                {
                    dynamic jsonObject = GetJsonObjFromResponse(fullUrl, response);
                    throw new M2XAPIException(fullUrl, response.StatusCode, jsonObject == null ? null : jsonObject.message, jsonObject == null ? null : jsonObject.errors);
                }
            }
        }