GetRelativeUri() private method

private GetRelativeUri ( ) : string
return string
Esempio n. 1
0
        internal Response Send(Request request)
        {
            var uri = BaseUri + request.GetRelativeUri();
            var httpRequest = HttpWebRequest.CreateHttp(uri);

            if (request.Headers.Count > 0)
            {
                httpRequest.Headers = request.Headers;
            }

            httpRequest.KeepAlive = true;
            httpRequest.Proxy = null;
            httpRequest.SendChunked = false;
            httpRequest.Method = request.HttpMethod.ToString();
            httpRequest.UserAgent = ASettings.DriverName + "/" + ASettings.DriverVersion;

            if (!string.IsNullOrEmpty(Username) && !string.IsNullOrEmpty(Password))
            {
                httpRequest.Headers.Add(
                    "Authorization",
                    "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(Username + ":" + Password))
                );
            }

            if (!string.IsNullOrEmpty(request.Body))
            {
                httpRequest.ContentType = "application/json; charset=utf-8";

                var data = Encoding.UTF8.GetBytes(request.Body);
                var stream = httpRequest.GetRequestStream();

                stream.Write(data, 0, data.Length);
                stream.Flush();

                stream.Close();
                stream.Dispose();
            }
            else
            {
                httpRequest.ContentLength = 0;
            }

            var response = new Response();

            try
            {
                using (var httpResponse = (HttpWebResponse)httpRequest.GetResponse())
                {
                    var responseStream = httpResponse.GetResponseStream();
                    var reader = new StreamReader(responseStream);

                    response.StatusCode = (int)httpResponse.StatusCode;
                    response.Headers = httpResponse.Headers;
                    response.Body = reader.ReadToEnd();

                    reader.Close();
                    reader.Dispose();
                    responseStream.Close();
                    responseStream.Dispose();
                }

                response.DeserializeBody();
            }
            catch (WebException webException)
            {
                if ((webException.Status == WebExceptionStatus.ProtocolError) &&
                    (webException.Response != null))
                {
                    using (var exceptionHttpResponse = (HttpWebResponse)webException.Response)
                    {
                        response.StatusCode = (int)exceptionHttpResponse.StatusCode;

                        if (exceptionHttpResponse.Headers.Count > 0)
                        {
                            response.Headers = exceptionHttpResponse.Headers;
                        }

                        if (exceptionHttpResponse.ContentLength > 0)
                        {
                            using (var exceptionResponseStream = exceptionHttpResponse.GetResponseStream())
                            using (var exceptionReader = new StreamReader(exceptionResponseStream))
                            {
                                response.Body = exceptionReader.ReadToEnd();
                            }

                            response.DeserializeBody();
                        }
                    }

                    response.Error = new AEerror();
                    response.Error.StatusCode = response.StatusCode;
                    response.Error.Number = 0;
                    response.Error.Message = "Protocol error: " + webException.Message;
                    response.Error.Exception = webException;

                    if (response.DataType == DataType.Document)
                    {
                        var document = (Dictionary<string, object>)response.Data;

                        response.Error.StatusCode = document.Int("code");
                        response.Error.Number = document.Int("errorNum");
                        response.Error.Message = "ArangoDB error: " + document.String("errorMessage");
                    }
                }
                else
                {
                    throw;
                }
            }

            return response;
        }
Esempio n. 2
0
        internal Response Send(Request request)
        {
            var uri         = BaseUri + request.GetRelativeUri();
            var httpRequest = HttpWebRequest.CreateHttp(uri);

            if (request.Headers.Count > 0)
            {
                httpRequest.Headers = request.Headers;
            }

            httpRequest.KeepAlive   = true;
            httpRequest.Proxy       = null;
            httpRequest.SendChunked = false;
            httpRequest.Method      = request.HttpMethod.ToString();
            httpRequest.UserAgent   = ASettings.DriverName + "/" + ASettings.DriverVersion;

            if (!string.IsNullOrEmpty(Username) && !string.IsNullOrEmpty(Password))
            {
                httpRequest.Headers.Add(
                    "Authorization",
                    "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(Username + ":" + Password))
                    );
            }

            if (!string.IsNullOrEmpty(request.Body))
            {
                httpRequest.ContentType = "application/json; charset=utf-8";

                var data   = Encoding.UTF8.GetBytes(request.Body);
                var stream = httpRequest.GetRequestStream();

                stream.Write(data, 0, data.Length);
                stream.Flush();

                stream.Close();
                stream.Dispose();
            }
            else
            {
                httpRequest.ContentLength = 0;
            }

            var response = new Response();

            try
            {
                using (var httpResponse = (HttpWebResponse)httpRequest.GetResponse())
                {
                    var responseStream = httpResponse.GetResponseStream();
                    var reader         = new StreamReader(responseStream);

                    response.StatusCode = (int)httpResponse.StatusCode;
                    response.Headers    = httpResponse.Headers;
                    response.Body       = reader.ReadToEnd();

                    reader.Close();
                    reader.Dispose();
                    responseStream.Close();
                    responseStream.Dispose();
                }

                response.DeserializeBody();
            }
            catch (WebException webException)
            {
                if ((webException.Status == WebExceptionStatus.ProtocolError) &&
                    (webException.Response != null))
                {
                    using (var exceptionHttpResponse = (HttpWebResponse)webException.Response)
                    {
                        response.StatusCode = (int)exceptionHttpResponse.StatusCode;

                        if (exceptionHttpResponse.Headers.Count > 0)
                        {
                            response.Headers = exceptionHttpResponse.Headers;
                        }

                        if (exceptionHttpResponse.ContentLength > 0)
                        {
                            using (var exceptionResponseStream = exceptionHttpResponse.GetResponseStream())
                                using (var exceptionReader = new StreamReader(exceptionResponseStream))
                                {
                                    response.Body = exceptionReader.ReadToEnd();
                                }

                            response.DeserializeBody();
                        }
                    }

                    response.Error            = new AEerror();
                    response.Error.StatusCode = response.StatusCode;
                    response.Error.Number     = 0;
                    response.Error.Message    = "Protocol error: " + webException.Message;
                    response.Error.Exception  = webException;

                    if (response.DataType == DataType.Document)
                    {
                        var document = (Dictionary <string, object>)response.Data;

                        response.Error.StatusCode = document.Int("code");
                        response.Error.Number     = document.Int("errorNum");
                        response.Error.Message    = "ArangoDB error: " + document.String("errorMessage");
                    }
                }
                else
                {
                    throw;
                }
            }

            return(response);
        }