Exemple #1
0
        public AllInOneResponse <T> SendAsync <T>(List <FileItem> fileItems, string url, List <KeyValuePair <string, string> > headerList, List <KeyValuePair <string, string> > parameterList, string accessToken)
        {
            var response = SendAsync(fileItems, url, headerList, parameterList, accessToken);
            AllInOneResponse <T> TObject = null;

            if (response != null && !response.HasError)
            {
                TObject = _serializer.DeserializeObject <AllInOneResponse <T> >(response.ResponseString);
            }
            else if (response != null && response.HasError)
            {
                TObject = new AllInOneResponse <T>(response);
            }

            return(TObject);
        }
Exemple #2
0
        public AllInOneResponse SendAsync(List <FileItem> fileItems, string url, List <KeyValuePair <string, string> > headerList, List <KeyValuePair <string, string> > parameterList, string accessToken)
        {
            var builder          = new StringBuilder();
            var content          = new MultipartFormDataContent();
            var fileContentArray = new StreamContent[fileItems.Count];

            for (var i = 0; i < fileItems.Count; i++)
            {
                if (fileItems[i].File != null)
                {
                    //MemoryStream stream = new MemoryStream();
                    //fileItems[i].File.CopyTo(stream);
                    var stream = fileItems[i].File.OpenReadStream();
                    fileContentArray[i] = new StreamContent(stream)
                    {
                        Headers =
                        {
                            ContentDisposition = new ContentDispositionHeaderValue("form-data")
                            {
                                Name     = fileItems[i].ParamterName,
                                FileName = DateTime.Now.Ticks.ToString()//$"\"{fileItems[i].File.FileName}\""
                            },
                            ContentType        = new MediaTypeHeaderValue(fileItems[i].File.ContentType)
                        }
                    };
                    fileContentArray[i].LoadIntoBufferAsync().Wait();

                    content.Add(fileContentArray[i]);
                    builder.AppendLine("Request at " + GetDateNowString());

                    builder.AppendLine(url);
                    builder.AppendLine("FileParameterName =" + fileItems[i].ParamterName);

                    builder.AppendLine("File Content Type = " + fileItems[i].File.ContentType);
                }
            }

            if (parameterList.Count > 0)
            {
                builder.Append("Parameters = ");
                foreach (var item in parameterList)
                {
                    if (!string.IsNullOrWhiteSpace(item.Value))
                    {
                        var paramContent = new StringContent(item.Value);
                        paramContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
                        {
                            Name = item.Key
                        };
                        content.Add(paramContent);
                        builder.AppendFormat("{0}={1}&", item.Key, item.Value);
                    }
                }
                builder.AppendLine();
            }

            AllInOneResponse TObject = null;

            using (var client = new HttpClient())
            {
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*"));
                if (headerList.Count > 0)
                {
                    builder.Append("Request Headers = ");
                    foreach (var item in headerList)
                    {
                        client.DefaultRequestHeaders.Add(item.Key, item.Value);
                        builder.AppendFormat("{0}={1}&", item.Key, item.Value);
                    }
                    builder.AppendLine();
                }

                client.DefaultRequestHeaders.Add("Authorization", $"{Constants.Headers.Bearer} {accessToken}");
                client.Timeout = new TimeSpan(3, 0, 0);
                try
                {
                    content.LoadIntoBufferAsync().Wait();
                    //client.PostAsync(url, content).Wait();
                    var response = client.PostAsync(url, content).Result;
                    if (response.IsSuccessStatusCode)
                    {
                        var cont = response.Content.ReadAsStringAsync();
                        builder.AppendLine("Response at " + GetDateNowString());
                        builder.AppendLine(cont.Result);
                        if (!string.IsNullOrWhiteSpace(cont.Result))
                        {
                            TObject = _serializer.DeserializeObject <AllInOneResponse>(cont.Result);
                            TObject.ResponseString = cont.Result;
                        }
                    }
                    else
                    {
                        builder.AppendLine("Response at " + GetDateNowString());
                        builder.AppendLine(response.ToString());
                        if (response.Content != null)
                        {
                            var cont = response.Content.ReadAsStringAsync();
                            if (!string.IsNullOrEmpty(cont.Result))
                            {
                                TObject = _serializer.DeserializeObject <AllInOneResponse>(cont.Result);
                                TObject.ResponseString = cont.Result;


                                builder.AppendLine("Response Content = " + cont.Result);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    var exceptionBuilder = new StringBuilder();

                    do
                    {
                        exceptionBuilder.AppendLine($"Exception = {ex.Message}");
                        ex = ex.InnerException;
                    } while (ex != null);

                    TObject = new AllInOneResponse {
                        code = 500, message = exceptionBuilder.ToString()
                    };
                    builder.AppendLine("Response at " + GetDateNowString());
                    builder.AppendLine(exceptionBuilder.ToString());
                }
                finally
                {
                    builder.AppendLine("*************************************************************");
                    builder.AppendLine();
                    Logger.LoggerManager.LogRequest(builder);
                }
            }

            return(TObject);
        }
Exemple #3
0
        public AllInOneResponse DoRequest(AllInOneRequest request)
        {
            var builder = new StringBuilder();

            try
            {
                if (string.IsNullOrEmpty(request.ServerUrl))
                {
                    throw new AllInOneException("Invalid server");
                }

                var httpWebRequest = (HttpWebRequest)WebRequest.Create(request.ServerUrl);
                if (request.IsAuthorized)
                {
                    httpWebRequest.Headers["Authorization"] = $"{Constants.Headers.Bearer} {request.AccessToken}";
                }
                foreach (var header in request.Headers)
                {
                    httpWebRequest.Headers[header.Key] = header.Value;
                }
                //AddDefaultRequestHeaders(ref httpWebRequest);

                httpWebRequest.Method = request.Method.ToString();
                builder.AppendLine("Request at " + GetDateNowString());
                builder.AppendLine($"{request.ServerUrl} [{request.Method}]");

                builder.Append("Headers: ");
                foreach (var headerKey in httpWebRequest.Headers.AllKeys)
                {
                    builder.AppendLine($"[{headerKey}:{httpWebRequest.Headers[headerKey]}] ");
                }
                builder.AppendLine();

                if (request.Body != null)
                {
                    builder.Append("Body: ");
                    if (request.IsFormUrlEncoded)
                    {
                        httpWebRequest.ContentType = Constants.Headers.FormUrlEncodedContentType;
                        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStreamAsync().Result))
                        {
                            builder.AppendLine(request.Body.ToString());
                            streamWriter.Write(request.Body);
                            streamWriter.Flush();
                        }
                        //httpWebResponse = await httpWebRequest.PostAsync(request.ServerUrl, new FormUrlEncodedContent(request.Body as Dictionary<string, string>));
                    }
                    else // JSON Request.
                    {
                        httpWebRequest.ContentType = Constants.Headers.JsonContentType;
                        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStreamAsync().Result))
                        {
                            var json = _serializer.SerializeObject(request.Body);
                            builder.AppendLine(json);
                            streamWriter.Write(json);
                            streamWriter.Flush();
                        }
                    }
                }
                var responseString = string.Empty; //await httpWebResponse.Content.ReadAsStringAsync();
                if (request.Method == HttpMethod.Post && !request.AllowDuplicate)
                {
                    if (lastPostRequest != null && request.ServerUrl == lastPostRequest.ServerUrl &&
                        request.Body == lastPostRequest.Body &&
                        request.CreatedDate.Subtract(lastPostRequest.CreatedDate).Seconds < 3)
                    {
                        responseString = lastPostResponse;
                        builder.Insert(0, "[DUPLICATED] ");
                    }

                    lastPostRequest = request;
                }

                Logger.LoggerManager.LogRequest(builder);
                builder.Clear();
                if (string.IsNullOrEmpty(responseString))
                {
                    try
                    {
                        httpWebRequest.Timeout = 300000;
                        var httpResponse = httpWebRequest.GetResponseAsync().Result;

                        using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                        {
                            responseString = streamReader.ReadToEnd();
                        }
                    }
                    catch (AggregateException ex)
                    {
                        responseString = ex.Message;
                        if (ex.InnerException.GetType() == typeof(WebException))
                        {
                            WebException wex = (WebException)ex.InnerException;
                            if (wex.Response != null)
                            {
                                using (var errorResponse = (HttpWebResponse)wex.Response)
                                {
                                    using (var reader = new StreamReader(errorResponse.GetResponseStream()))
                                    {
                                        responseString = reader.ReadToEnd();
                                        //TODO: use JSON.net to parse this string and look at the error message
                                    }
                                }
                            }
                        }
                    }
                    catch (WebException wex)
                    {
                        if (wex.Response != null)
                        {
                            using (var errorResponse = (HttpWebResponse)wex.Response)
                            {
                                using (var reader = new StreamReader(errorResponse.GetResponseStream()))
                                {
                                    responseString = reader.ReadToEnd();
                                    //TODO: use JSON.net to parse this string and look at the error message
                                }
                            }
                        }
                    }
                }

                builder.AppendLine("Response at " + GetDateNowString());
                builder.AppendLine(responseString);

                AllInOneResponse TObject = new AllInOneResponse();
                try
                {
                    TObject = _serializer.DeserializeObject <AllInOneResponse>(responseString);
                }
                catch (Exception ex)
                {
                    builder.AppendLine("Exception: " + ex.Message);
                }
                finally
                {
                    TObject.ResponseString = responseString;
                    builder.AppendLine("*************************************************************");
                    builder.AppendLine();
                    Logger.LoggerManager.LogRequest(builder);
                }

                if (TObject.HasError) // invalid response.
                {
                    if (TObject.code == INVALID_TOKEN_CODE)
                    {
                        if (request.RefreshTokenDelegate != null)
                        {
                            var result = request.RefreshTokenDelegate();
                            if (string.IsNullOrWhiteSpace(result))
                            {
                                throw new InvalidTokenException();
                            }

                            request.AccessToken = result;
                            TObject             = DoRequest(request);
                        }
                        else
                        {
                            //return TObject;
                            throw new InvalidTokenException();
                        }
                    }

                    // if code = expired/invalid token
                    //throw new ExpiredTokenException();

                    //TODO: throw AllInOne Exception after handling any exception.
                    //throw new AllInOneException(new Error { Code = TObject.code.ToString(), Message = TObject.message }, null);
                }
                else if (request.Method == HttpMethod.Post)
                {
                    lastPostResponse = responseString;
                }

                return(TObject);
            }
            catch (ExpiredTokenException)
            {
                //await authManager.RefreshToken();

                // re generate the old request again.
                //return await DoRequest(request);
                return(null);
            }
            finally
            {
            }
            // TODO: Handle any exception
            //catch (AllInOneException AllInOneException)
            //{
            //    throw;
            //}
        }