Пример #1
0
        public void ContentType_Request_Test()
        {
            //Assign
            IRequest       baseRequest = new HttpRequest("http://test.com/", "command");
            string         contentType = "contentType";
            IRequest       target;
            HttpWebRequest actual;

            //Act
            target = new ContentTypeRequest(baseRequest, contentType);
            actual = target.Build();

            //Assert
            Assert.AreEqual(contentType, actual.ContentType);
        }
Пример #2
0
        public static RequestResult SendPostRequest(string URL, object data, ContentTypeRequest contentTypeRequest = ContentTypeRequest.Json, Dictionary <string, string> headers = null)
        {
            //dynamic result = new System.Dynamic.ExpandoObject();

            RequestResult result  = new RequestResult();
            string        HostApi = getUrl() + URL;
            var           request = WebRequest.Create(HostApi) as HttpWebRequest;

            string contentType = "application/json; charset=utf-8";

            if (contentTypeRequest != ContentTypeRequest.Json)
            {
                contentType = "application/x-www-form-urlencoded";
            }

            request.KeepAlive   = true;
            request.Method      = "POST";
            request.ContentType = contentType; //"application/x-www-form-urlencoded"; "application/json; charset=utf-8";

            if (headers != null)
            {
                foreach (var item in headers)
                {
                    request.Headers.Add(item.Key, item.Value);
                }
            }

            string param = string.Empty;

            if (contentType.Contains("application/json") == true)
            {
                param = JsonConvert.SerializeObject(data);
            }
            else
            {
                string dataTypeName = data.GetType().Name;
                if (dataTypeName == "String")
                {
                    param = data.ToString();
                }
                else
                {
                    Type dataType = data.GetType();
                    bool isDict   = dataType.IsGenericType && dataType.GetGenericTypeDefinition() == typeof(Dictionary <,>);
                    if (isDict == true)
                    {
                        List <string>        formData = new List <string>();
                        IDictionary          idict    = (IDictionary)data;
                        IEnumerable <string> keys     = idict.Keys.Cast <string>();
                        foreach (var key in keys)
                        {
                            formData.Add(string.Format("{0}={1}", key, idict[key]));
                        }

                        param = string.Join("&", formData);
                    }
                    else
                    {
                        var serialized   = JsonConvert.SerializeObject(data);
                        var deserialized = JsonConvert.DeserializeObject <Dictionary <string, string> >(serialized);
                        param = deserialized.Select((kvp) => kvp.Key.ToString() + "=" + Uri.EscapeDataString(kvp.Value)).Aggregate((p1, p2) => p1 + "&" + p2);
                    }
                }
            }


            byte[] byteArray = Encoding.UTF8.GetBytes(param);

            string responseContent = null;
            bool   flagSuccess     = false;

            try
            {
                using (var writer = request.GetRequestStream())
                {
                    writer.Write(byteArray, 0, byteArray.Length);
                }

                using (var response = request.GetResponse() as HttpWebResponse)
                {
                    using (var reader = new StreamReader(response.GetResponseStream()))
                    {
                        responseContent = reader.ReadToEnd();
                        flagSuccess     = true;
                    }
                }
            }
            catch (WebException ex)
            {
                responseContent = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();
            }

            result.Content = responseContent;
            result.Status  = flagSuccess;

            return(result);
        }