private static void Flatten(List <String> pairs, JToken input, List <Object> indices) { if (input == null) { return; } switch (input.Type) { case JTokenType.Array: case JTokenType.Object: case JTokenType.Property: foreach (var token in input) { indices.Add(token); WwwFormUrlEncodedMediaTypeFormatter.Flatten(pairs, token, indices); indices.RemoveAt(indices.Count - 1); } break; default: var value = input.ToObject <String>(); if (value == null) { return; } pairs.Add(String.Format("{0}={1}", Uri.EscapeDataString(input.Path), Uri.EscapeDataString(value))); break; } }
public virtual async Task <ApiResult <TResponse, TError> > DeleteAsync <TResponse, TError>(String resource, Object data = null, MediaTypeFormatterEnum?mediaTypeFormatter = null) { var query = WwwFormUrlEncodedMediaTypeFormatter.Serialize(data); if (!String.IsNullOrWhiteSpace(query)) { if (resource.Contains("?")) { resource = $"{resource}&{query}"; } else { resource = $"{resource}?{query}"; } } var result = await this._client.DeleteAsync(resource); if (result.StatusCode == HttpStatusCode.OK) { return new ApiResult <TResponse, TError> { Response = await result.Content.ReadAsAsync <TResponse>() } } ; return(new ApiResult <TResponse, TError> { Error = await result.Content.ReadAsAsync <TError>() }); }
public static String Serialize(Object value) { if (value == null) { return(null); } JToken token = JToken.FromObject(value); List <String> pairs = new List <String>(); WwwFormUrlEncodedMediaTypeFormatter.Flatten(pairs, token, new List <Object> { }); return(String.Join("&", pairs)); }
public virtual TResponse Delete <TResponse>(String resource, Object data = null, MediaTypeFormatterEnum?mediaTypeFormatter = null) { var query = WwwFormUrlEncodedMediaTypeFormatter.Serialize(data); if (!String.IsNullOrWhiteSpace(query)) { if (resource.Contains("?")) { resource = $"{resource}&{query}"; } else { resource = $"{resource}?{query}"; } } return(this._client.DeleteAsync(resource).Result.Content.ReadAsAsync <TResponse>().Result); }
public override Task WriteToStreamAsync(Type type, Object value, Stream writeStream, System.Net.Http.HttpContent content, System.Net.TransportContext transportContext, System.Threading.CancellationToken cancellationToken) { if (value == null) { return(Task.FromResult(0)); // Task.CompletedTask } else if (base.CanWriteType(type)) { return(base.WriteToStreamAsync(type, value, writeStream, content, transportContext)); } else { return(Task.Factory.StartNew(() => { Byte[] bytes = encoding.GetBytes(WwwFormUrlEncodedMediaTypeFormatter.Serialize(value)); writeStream.Write(bytes, 0, bytes.Length); }, cancellationToken)); } }