Пример #1
0
        private void SendMessage(ApiRequest requestInfo)
        {
            try
            {
                _log.DebugFormat("begin send request {0}", requestInfo);

                CoreContext.TenantManager.SetCurrentTenant(requestInfo.Tenant);
                var authKey = SecurityContext.AuthenticateMe(requestInfo.User.ID);

                if (string.IsNullOrEmpty(authKey))
                {
                    _log.ErrorFormat("can't obtain authorization cookie for user {0}", requestInfo.User.ID);
                    return;
                }

                var uri = BuildUri(requestInfo);
                _log.Debug(uri);

                _log.DebugFormat("builded uri for request {0}", uri);

                var request = (HttpWebRequest)WebRequest.Create(uri);
                request.Method = requestInfo.Method; 
                request.AllowAutoRedirect = true;
                request.Headers["Authorization"] = authKey;

                using (var requestStream = request.GetRequestStream())
                {
                    if (requestInfo.FilesToPost != null && requestInfo.FilesToPost.Any())
                    {
                        WriteMultipartRequest(request, requestStream, requestInfo);
                    }
                    else
                    {
                        WriteFormEncoded(request, requestStream, requestInfo, authKey);
                    }
                }

                try
                {
                    using (var response = request.GetResponse())
                    using (var responseStream = response.GetResponseStream())
                    {
                        if (responseStream != null)
                        {
                            _log.DebugFormat("response from server: {0}", new StreamReader(responseStream).ReadToEnd());
                        }
                    }
                }
                catch (Exception error)
                {
                    _log.Error("error while getting the response", error);
                }
                
                _log.DebugFormat("end send request {0}", requestInfo);
            }
            catch (Exception x)
            {
                _log.Error("error while sending request", x);
                throw;
            }
        }
Пример #2
0
        private void WriteFormEncoded(WebRequest request, Stream requestStream, ApiRequest requestInfo, string authKey)
        {
            var stringBuilder = new StringBuilder();
            if (requestInfo.Parameters != null && requestInfo.Parameters.Any())
            {
                foreach (var parameter in requestInfo.Parameters.Where(x => x.Value != null))
                {
                    if (parameter.Value is IEnumerable<object>)
                    {
                        foreach (var value in ((IEnumerable<object>)parameter.Value))
                        {
                            stringBuilder.AppendFormat("{0}[]={1}&", HttpUtility.UrlEncode(parameter.Name), HttpUtility.UrlEncode(value.ToString()));
                        }
                    }
                    else if (parameter.Value is DateTime)
                    {
                        stringBuilder.AppendFormat("{0}={1}&", HttpUtility.UrlEncode(parameter.Name), HttpUtility.UrlEncode(((DateTime)parameter.Value).ToString("s")));
                    }
                    else
                    {
                        stringBuilder.AppendFormat("{0}={1}&", HttpUtility.UrlEncode(parameter.Name), HttpUtility.UrlEncode(parameter.Value.ToString()));
                    }
                }
            }

            stringBuilder.AppendFormat("asc_auth_key={0}", authKey);

            _log.DebugFormat("writing form data {0}", stringBuilder);

            WriteUtf8String(requestStream, stringBuilder.ToString());
            request.ContentType = "application/x-www-form-urlencoded";
        }
Пример #3
0
 public void EnqueueRequest(ApiRequest request)
 {
     _log.DebugFormat("queue request \"{0}\"", request);
     _messageQueue.Add(request);
 }
Пример #4
0
        private void WriteMultipartRequest(WebRequest request, Stream requestStream, ApiRequest requestInfo)
        {
            var boundaryId = DateTime.Now.Ticks.ToString("x");
            var boundary = "\r\n--" + boundaryId + "\r\n";
            var formdataTemplate = "\r\n--" + boundaryId + "\r\nContent-Disposition: form-data; name=\"{0}\";\r\n\r\n{1}";

            if (requestInfo.Parameters != null && requestInfo.Parameters.Any())
            {
                foreach (var parameter in requestInfo.Parameters.Where(x => x.Value != null))
                {
                    var formItem = string.Empty;
                    if (parameter.Value is IEnumerable<object>)
                    {
                        foreach (var value in ((IEnumerable<object>)parameter.Value))
                        {
                            formItem = string.Format(formdataTemplate, parameter.Name, value);
                        }
                    }
                    else if (parameter.Value is DateTime)
                    {
                        formItem = string.Format(formdataTemplate, parameter.Name, ((DateTime)parameter.Value).ToString("s"));
                    }
                    else
                    {
                        formItem = string.Format(formdataTemplate, parameter.Name, parameter.Value);
                    }

                    if (!string.IsNullOrEmpty(formItem))
                    {
                        _log.DebugFormat("writing form item boundary:{0}", formItem);
                        WriteUtf8String(requestStream, formItem);
                    }
                }
            }

            WriteUtf8String(requestStream, boundary);

            var files = requestInfo.FilesToPost.ToArray();
            for (int i = 0; i < files.Length; i++)
            {
                WriteFile(requestStream, files[i]);
                
                if (i < files.Length - 1)
                    WriteUtf8String(requestStream, boundary);
                else
                    WriteUtf8String(requestStream, "\r\n--" + boundaryId + "--\r\n");
            }

            request.ContentType = new ContentType("multipart/form-data") { Boundary = boundaryId }.ToString();
        }
Пример #5
0
 private Uri BuildUri(ApiRequest requestInfo)
 {
     return new Uri(string.Format(_adressTemplate, requestInfo.Tenant.TenantAlias, requestInfo.Url.TrimStart('/')));
 }
Пример #6
0
        private void SendMessage(ApiRequest requestInfo)
        {
            try
            {
                _log.DebugFormat("begin send request {0}", requestInfo);

                CoreContext.TenantManager.SetCurrentTenant(requestInfo.Tenant);
                var authKey = SecurityContext.AuthenticateMe(requestInfo.User.ID);

                if (string.IsNullOrEmpty(authKey))
                {
                    _log.ErrorFormat("can't obtain authorization cookie for user {0}", requestInfo.User.ID);
                    return;
                }

                var uri = BuildUri(requestInfo);
                _log.Debug(uri);

                _log.DebugFormat("builded uri for request {0}", uri);

                var request = (HttpWebRequest)WebRequest.Create(uri);
                request.Method                   = requestInfo.Method;
                request.AllowAutoRedirect        = true;
                request.Headers["Authorization"] = authKey;

                using (var requestStream = request.GetRequestStream())
                {
                    if (requestInfo.FilesToPost != null && requestInfo.FilesToPost.Any())
                    {
                        WriteMultipartRequest(request, requestStream, requestInfo);
                    }
                    else
                    {
                        WriteFormEncoded(request, requestStream, requestInfo, authKey);
                    }
                }

                try
                {
                    using (var response = request.GetResponse())
                        using (var responseStream = response.GetResponseStream())
                        {
                            if (responseStream != null)
                            {
                                _log.DebugFormat("response from server: {0}", new StreamReader(responseStream).ReadToEnd());
                            }
                        }
                }
                catch (Exception error)
                {
                    _log.Error("error while getting the response", error);
                }

                _log.DebugFormat("end send request {0}", requestInfo);
            }
            catch (Exception x)
            {
                _log.Error("error while sending request", x);
                throw;
            }
        }
Пример #7
0
 public void EnqueueRequest(ApiRequest request)
 {
     _log.DebugFormat("queue request \"{0}\"", request);
     _messageQueue.Add(request);
 }
Пример #8
0
 private Uri BuildUri(ApiRequest requestInfo)
 {
     return(new Uri(string.Format(_adressTemplate, requestInfo.Tenant.TenantAlias, requestInfo.Url.TrimStart('/'))));
 }