Ejemplo n.º 1
0
        /// <summary>
        /// Converts JSON to a application/x-www-form-urlencoded before POSTing to the Postmates API.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="url"></param>
        /// <param name="_object"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task <T> PostFormAsync <T>(string url, dynamic _object, CancellationToken cancellationToken = default)
        {
            var payloadString = "";
            var first         = true;

            //dynamic data = JObject.Parse(_object);

            dynamic data = JObject.FromObject(_object);

            foreach (var descriptor in TypeDescriptor.GetProperties(data))
            {
                var key   = descriptor.Name;
                var value = descriptor.GetValue(data).Value;
                if (value is null)
                {
                    continue;
                }
                if (!(value is string))
                {
                    value = (descriptor.GetValue(data) == null) ? null : JsonConvert.SerializeObject(descriptor.GetValue(data),
                                                                                                     Newtonsoft.Json.Formatting.None,
                                                                                                     _jsonSettings);
                    value = (string)value.Trim('"');
                }
                if (!string.IsNullOrEmpty(value))
                {
                    if (!first)
                    {
                        payloadString += "&";
                    }
                    payloadString += $"{key}={value}";
                    first          = false;
                }
            }

            var payload = new JsonClientPayload("application/x-www-form-urlencoded", payloadString);

            var response = await _jsonClient.PostUnsafeAsync(url, payload);

            if (response.IsSuccess)
            {
                return(response.As <T>());
            }
            else
            {
                var args = response.As <PostmatesExceptionArgs>();
                throw PostmatesExceptionThrower.GetException(args);
            }
        }
Ejemplo n.º 2
0
        public async Task Post_CustomPayloadAsync()
        {
            // Ensure that POST uploading a [JsonCustomPayload] works.

            using (new MockHttpServer(baseUri,
                                      async context =>
            {
                var request = context.Request;
                var response = context.Response;

                if (request.Method != "POST")
                {
                    response.StatusCode = (int)HttpStatusCode.MethodNotAllowed;
                    return;
                }

                if (request.Path.ToString() != "/info")
                {
                    response.StatusCode = (int)HttpStatusCode.NotFound;
                    return;
                }

                Assert.Equal("application/x-www-form-urlencoded", request.ContentType);
                Assert.Equal("key1=value1&key2=value2", request.GetBodyText());

                var output = new ReplyDoc()
                {
                    Value1 = "Hello World!"
                };

                response.ContentType = "application/json";

                await response.WriteAsync(NeonHelper.JsonSerialize(output));
            }))
            {
                using (var jsonClient = new JsonClient())
                {
                    var doc = new JsonClientPayload("application/x-www-form-urlencoded", "key1=value1&key2=value2");

                    await jsonClient.PostAsync(baseUri + "info", doc);
                }
            };
        }
Ejemplo n.º 3
0
        public async Task OptionsAsync_NullPayloadAsync()
        {
            // Ensure that OPTIONS uploading a NULL payload works.

            using (new MockHttpServer(baseUri,
                                      async context =>
            {
                var request = context.Request;
                var response = context.Response;

                if (request.Method != "OPTIONS")
                {
                    response.StatusCode = (int)HttpStatusCode.MethodNotAllowed;
                    return;
                }

                if (request.Path.ToString() != "/info")
                {
                    response.StatusCode = (int)HttpStatusCode.NotFound;
                    return;
                }

                var output = new ReplyDoc()
                {
                    Value1 = "Hello World!"
                };

                response.ContentType = "application/json";

                await response.WriteAsync(NeonHelper.JsonSerialize(output));
            }))
            {
                using (var jsonClient = new JsonClient())
                {
                    var doc = new JsonClientPayload("application/x-www-form-urlencoded", "key1=value1&key2=value2");

                    await jsonClient.OptionsAsync(baseUri + "info", doc);
                }
            };
        }