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)); }
/// <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); }
internal M2XResponse(Uri url, M2XClientMethod method, string content) { this.RequestUri = url; this.RequestMethod = method; this.RequestContent = content; }
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)); }
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); } } }