Ejemplo n.º 1
0
        public static RaygunRequestMessage Build(HttpRequestMessage request, RaygunRequestMessageOptions options)
        {
            var message = new RaygunRequestMessage();

            options = options ?? new RaygunRequestMessageOptions();

            message.HostName    = request.RequestUri.Host;
            message.Url         = request.RequestUri.AbsolutePath;
            message.HttpMethod  = request.Method.ToString();
            message.IPAddress   = GetIPAddress(request);
            message.Form        = ToDictionary(request.GetQueryNameValuePairs(), options.IsFormFieldIgnored);
            message.QueryString = ToDictionary(request.GetQueryNameValuePairs(), s => false);

            if (!options.IsRawDataIgnored)
            {
                object body;
                if (request.Properties.TryGetValue(RaygunWebApiDelegatingHandler.RequestBodyKey, out body))
                {
                    message.RawData = body.ToString();
                }
            }

            SetHeaders(message, request, options.IsHeaderIgnored);

            return(message);
        }
Ejemplo n.º 2
0
        public static RaygunRequestMessage Build(OwinEnvironment environment)
        {
            var request = new OwinRequest(environment);

            // ToDo: limit querystring, form, and header values to 256 characters
            var message = new RaygunRequestMessage();

            message.HostName   = request.Host.Value;
            message.Url        = request.Uri.AbsolutePath;
            message.HttpMethod = request.Method;
            message.IPAddress  = request.RemoteIpAddress; // ToDo: bring this up to par with the official client

            // ToDo: filter querystring values
            message.QueryString = request.Query.ToDictionary(_ => _.Key, _ => string.Join(", ", _.Value));

            // ToDo: filter form values (add 'password' by default?)
            message.Form = request.ReadForm().ToDictionary(_ => _.Key, _ => string.Join(", ", _.Value));

            // ToDo: filter headers
            message.Headers = request.Headers.ToDictionary(_ => _.Key, _ => string.Join(", ", _.Value));
            message.Headers.Remove("Cookie");

            message.Cookies = GetCookies(request.Cookies);

            if (request.ContentType != "text/html" && request.ContentType != "application/x-www-form-urlencoded" && request.Method != "GET")
            {
                var text = request.BodyAsString();

                message.RawData = text.Substring(0, Math.Min(4096, text.Length));
            }

            message.Data = GetData(request).Where(_ => _.Value != null).ToDictionary(_ => _.Key, _ => _.Value);

            return(message);
        }
        private const int MAX_VALUE_LENGTH           = 256; // Characters

        public static RaygunRequestMessage Build(HttpRequestMessage request, RaygunRequestMessageOptions options)
        {
            options = options ?? new RaygunRequestMessageOptions();

            var message = new RaygunRequestMessage()
            {
                IPAddress   = GetIPAddress(request),
                QueryString = GetQueryString(request, options),
                Form        = GetForm(request, options),
                RawData     = GetRawData(request, options),
                Headers     = GetHeaders(request, options)
            };

            try
            {
                message.HostName   = request.RequestUri.Host;
                message.Url        = request.RequestUri.AbsolutePath;
                message.HttpMethod = request.Method.ToString();
            }
            catch (Exception e)
            {
                System.Diagnostics.Trace.WriteLine("Failed to get basic request info: {0}", e.Message);
            }

            return(message);
        }
        private const int MAX_VALUE_LENGTH    = 256;  // Characters

        public static RaygunRequestMessage Build(HttpRequest request, RaygunRequestMessageOptions options)
        {
            options = options ?? new RaygunRequestMessageOptions();

            RaygunRequestMessage message = new RaygunRequestMessage()
            {
                IPAddress   = GetIpAddress(request),
                QueryString = GetQueryString(request, options),
                Cookies     = GetCookies(request, options),
                Data        = GetServerVariables(request, options),
                Form        = GetForm(request, options),
                RawData     = GetRawData(request, options),
                Headers     = GetHeaders(request, options)
            };

            try
            {
                message.HostName   = request.Url.Host;
                message.Url        = request.Url.AbsolutePath;
                message.HttpMethod = request.RequestType;
            }
            catch (Exception e)
            {
                RaygunLogger.Instance.Error($"Failed to get basic request info: { e.Message}");
            }

            return(message);
        }
        private static RaygunRequestMessage CreateRaygunRequestMessage(LogEntry logEntry)
        {
            if (logEntry.Http?.Request == null)
            {
                return(null);
            }

            var requestDetails = new RaygunRequestMessage
            {
                HttpMethod = logEntry.Http.Request.Method,
                Url        = logEntry.Http.Request.Uri,
                HostName   = logEntry.Http.Request.Host,
                RawData    = GetTextContent(logEntry.Http.Request.Body),
                Headers    = logEntry.Http.Request.Headers?.Where(h => !string.IsNullOrEmpty(h.Key)).ToLookup(h => h.Key, h => h.Value).ToDictionary(g => g.Key, g => g.First())
            };

            // TODO Uri.Query only works for absolute urls, wtf?
            if (logEntry.Http.Request.Uri.Contains('?'))
            {
                var queryString    = HttpUtility.ParseQueryString(logEntry.Http.Request.Uri.Split('?').Last());
                var applicableKeys = queryString.AllKeys.Where(s => !string.IsNullOrEmpty(s));
                requestDetails.QueryString = applicableKeys.ToDictionary(k => k, k => queryString[k]);
            }

            return(requestDetails);
        }
Ejemplo n.º 6
0
        public static RaygunRequestMessage Build(HttpRequestMessage request, RaygunRequestMessageOptions options)
        {
            var message = new RaygunRequestMessage();

            options = options ?? new RaygunRequestMessageOptions();

            message.HostName    = request.RequestUri.Host;
            message.Url         = request.RequestUri.AbsolutePath;
            message.HttpMethod  = request.Method.ToString();
            message.IPAddress   = GetIPAddress(request);
            message.Form        = ToDictionary(request.GetQueryNameValuePairs(), options.IsFormFieldIgnored);
            message.QueryString = ToDictionary(request.GetQueryNameValuePairs(), s => false);

            SetHeaders(message, request, options.IsHeaderIgnored);

            if (!options.IsRawDataIgnored)
            {
                string contentType = null;
                if (message.Headers != null && message.Headers.Contains("Content-Type"))
                {
                    contentType = (string)message.Headers["Content-Type"];
                }

                if (contentType == null || CultureInfo.InvariantCulture.CompareInfo.IndexOf(contentType, "application/x-www-form-urlencoded", CompareOptions.IgnoreCase) < 0)
                {
                    object body;
                    if (request.Properties.TryGetValue(RaygunWebApiDelegatingHandler.RequestBodyKey, out body))
                    {
                        message.RawData = body.ToString();
                    }
                }
            }

            return(message);
        }
Ejemplo n.º 7
0
        public void QueryStringTest()
        {
            var request = new HttpRequest("test", "http://google.com", "test=test");

            var message = new RaygunRequestMessage(request, null);

            Assert.That(message.QueryString, Contains.Item(new KeyValuePair <string, string>("test", "test")));
        }
Ejemplo n.º 8
0
        public void IgnoreFormField_CaseInsensitive()
        {
            var request = CreateWritableRequest();

            request.Form.Add("TESTFORMFIELD", "FormFieldValue");
            Assert.AreEqual(1, request.Form.Count);

            var options = new RaygunRequestMessageOptions(new string[] { "testformfield" }, Enumerable.Empty <string>(), Enumerable.Empty <string>(), Enumerable.Empty <string>());
            var message = new RaygunRequestMessage(request, options);

            Assert.AreEqual(0, message.Form.Count);
        }
 private int CookieCount(RaygunRequestMessage message, string name)
 {
   int count = 0;
   foreach (Mindscape.Raygun4Net.Messages.RaygunRequestMessage.Cookie cookie in message.Cookies)
   {
     if (name.Equals(cookie.Name))
     {
       count++;
     }
   }
   return count;
 }
Ejemplo n.º 10
0
    public void DuplicateCookies()
    {
      var request = new HttpRequest("test", "http://google.com", "test=test");
      request.Cookies.Add(new HttpCookie("TestCookie", "CookieValue"));
      request.Cookies.Add(new HttpCookie("TestCookie", "CookieValue"));
      Assert.AreEqual(2, request.Cookies.Count);

      var message = new RaygunRequestMessage(request, new RaygunRequestMessageOptions());

      Assert.AreEqual(2, message.Cookies.Count);
      Assert.AreEqual(2, CookieCount(message, "TestCookie"));
    }
Ejemplo n.º 11
0
    public void IgnoreCookie_CaseInsensitive()
    {
      var request = new HttpRequest("test", "http://google.com", "test=test");
      request.Cookies.Add(new HttpCookie("TESTCOOKIE", "CookieValue"));
      request.Cookies.Add(new HttpCookie("TestCookie", "CookieValue"));
      request.Cookies.Add(new HttpCookie("testcookie", "CookieValue"));
      Assert.AreEqual(3, request.Cookies.Count);

      var options = new RaygunRequestMessageOptions(_empty, _empty, new string[] { "TeStCoOkIe" }, _empty);
      var message = new RaygunRequestMessage(request, options);

      Assert.AreEqual(0, message.Cookies.Count);
    }
Ejemplo n.º 12
0
    public void IgnoreCookie_Contains()
    {
      var request = new HttpRequest("test", "http://google.com", "test=test");
      request.Cookies.Add(new HttpCookie("TestCookieTest", "CookieValue"));
      request.Cookies.Add(new HttpCookie("TestCookie", "CookieValue"));
      request.Cookies.Add(new HttpCookie("CookieTest", "CookieValue"));
      Assert.AreEqual(3, request.Cookies.Count);

      var options = new RaygunRequestMessageOptions(_empty, _empty, new string[] { "*cookie*" }, _empty);
      var message = new RaygunRequestMessage(request, options);

      Assert.AreEqual(0, message.Cookies.Count);
    }
Ejemplo n.º 13
0
    public void IgnoreMultipleCookies()
    {
      var request = new HttpRequest("test", "http://google.com", "test=test");
      request.Cookies.Add(new HttpCookie("TestCookie1", "CookieValue"));
      request.Cookies.Add(new HttpCookie("TestCookie2", "CookieValue"));
      request.Cookies.Add(new HttpCookie("TestCookie3", "CookieValue"));
      Assert.AreEqual(3, request.Cookies.Count);

      var options = new RaygunRequestMessageOptions(_empty, _empty, new string[] { "TestCookie1", "TestCookie3" }, _empty);
      var message = new RaygunRequestMessage(request, options);

      Assert.AreEqual(1, message.Cookies.Count);
      Assert.AreEqual(1, CookieCount(message, "TestCookie2"));
    }
Ejemplo n.º 14
0
    public void IgnoreAllFormFields()
    {
      var request = CreateWritableRequest();

      request.Form.Add("TestFormField1", "FormFieldValue");
      request.Form.Add("TestFormField2", "FormFieldValue");
      request.Form.Add("TestFormField3", "FormFieldValue");
      Assert.AreEqual(3, request.Form.Count);

      var options = new RaygunRequestMessageOptions(new string[] { "*" }, _empty, _empty, _empty);
      var message = new RaygunRequestMessage(request, options);

      Assert.AreEqual(0, message.Form.Count);
    }
Ejemplo n.º 15
0
        public void IgnoreFormField_Contains()
        {
            var request = CreateWritableRequest();

            request.Form.Add("TestFormFieldTest", "FormFieldValue");
            request.Form.Add("TestFormField", "FormFieldValue");
            request.Form.Add("FormFieldTest", "FormFieldValue");
            Assert.AreEqual(3, request.Form.Count);

            var options = new RaygunRequestMessageOptions(new string[] { "*formfield*" }, Enumerable.Empty <string>(), Enumerable.Empty <string>(), Enumerable.Empty <string>());
            var message = new RaygunRequestMessage(request, options);

            Assert.AreEqual(0, message.Form.Count);
        }
Ejemplo n.º 16
0
        public void IgnoreAllCookies()
        {
            var request = new HttpRequest("test", "http://google.com", "test=test");

            request.Cookies.Add(new HttpCookie("TestCookie1", "CookieValue"));
            request.Cookies.Add(new HttpCookie("TestCookie2", "CookieValue"));
            request.Cookies.Add(new HttpCookie("TestCookie3", "CookieValue"));
            Assert.AreEqual(3, request.Cookies.Count);

            var options = new RaygunRequestMessageOptions(Enumerable.Empty <string>(), Enumerable.Empty <string>(), new string[] { "*" }, Enumerable.Empty <string>());
            var message = new RaygunRequestMessage(request, options);

            Assert.AreEqual(0, message.Cookies.Count);
        }
Ejemplo n.º 17
0
        public static RaygunRequestMessage Build(HttpRequest request, RaygunRequestMessageOptions options)
        {
            RaygunRequestMessage message = new RaygunRequestMessage();

            options = options ?? new RaygunRequestMessageOptions();

            message.HostName    = request.Url.Host;
            message.Url         = request.Url.AbsolutePath;
            message.HttpMethod  = request.RequestType;
            message.IPAddress   = GetIpAddress(request);
            message.QueryString = ToDictionary(request.QueryString, null);

            message.Headers = ToDictionary(request.Headers, options.IsHeaderIgnored);
            message.Headers.Remove("Cookie");

            message.Form    = ToDictionary(request.Form, options.IsFormFieldIgnored, true);
            message.Cookies = GetCookies(request.Cookies, options.IsCookieIgnored);

            // Remove ignored and duplicated variables
            message.Data = ToDictionary(request.ServerVariables, options.IsServerVariableIgnored);
            message.Data.Remove("ALL_HTTP");
            message.Data.Remove("HTTP_COOKIE");
            message.Data.Remove("ALL_RAW");

            if (!options.IsRawDataIgnored)
            {
                try
                {
                    var contentType = request.Headers["Content-Type"];
                    if (contentType != "text/html" && contentType != "application/x-www-form-urlencoded" && request.RequestType != "GET")
                    {
                        int length = 4096;
                        request.InputStream.Seek(0, SeekOrigin.Begin);
                        string temp = new StreamReader(request.InputStream).ReadToEnd();
                        if (length > temp.Length)
                        {
                            length = temp.Length;
                        }

                        message.RawData = temp.Substring(0, length);
                    }
                }
                catch (HttpException)
                {
                }
            }

            return(message);
        }
Ejemplo n.º 18
0
        public void IgnoreMultipleFormFields()
        {
            var request = CreateWritableRequest();

            request.Form.Add("TestFormField1", "FormFieldValue");
            request.Form.Add("TestFormField2", "FormFieldValue");
            request.Form.Add("TestFormField3", "FormFieldValue");
            Assert.AreEqual(3, request.Form.Count);

            var options = new RaygunRequestMessageOptions(new string[] { "TestFormField1", "TestFormField3" }, Enumerable.Empty <string>(), Enumerable.Empty <string>(), Enumerable.Empty <string>());
            var message = new RaygunRequestMessage(request, options);

            Assert.AreEqual(1, message.Form.Count);
            Assert.IsTrue(message.Form.Contains("TestFormField2"));
        }
Ejemplo n.º 19
0
        /// <summary>
        /// Asynchronously transmits an exception to Raygun.io.
        /// </summary>
        /// <param name="exception">The exception to deliver.</param>
        /// <param name="tags">A list of strings associated with the message.</param>
        /// <param name="userCustomData">A key-value collection of custom data that will be added to the payload.</param>
        public void SendInBackground(Exception exception, System.Collections.Generic.IList <string> tags, System.Collections.IDictionary userCustomData)
        {
            if (CanSend(exception))
            {
                // We need to process the HttpRequestMessage on the current thread,
                // otherwise it will be disposed while we are using it on the other thread.
                RaygunRequestMessage currentRequestMessage = BuildRequestMessage();

                ThreadPool.QueueUserWorkItem(c => {
                    _currentRequestMessage.Value = currentRequestMessage;
                    StripAndSend(exception, tags, userCustomData);
                });
                FlagAsSent(exception);
            }
        }
Ejemplo n.º 20
0
        private static RaygunRequestMessage BuildRequestMessageFromStructureValue(StructureValue requestMessageStructure)
        {
            var requestMessage = new RaygunRequestMessage();

            foreach (var property in requestMessageStructure.Properties)
            {
                switch (property.Name)
                {
                case nameof(RaygunRequestMessage.Url):
                    requestMessage.Url = property.AsString();
                    break;

                case nameof(RaygunRequestMessage.HostName):
                    requestMessage.HostName = property.AsString();
                    break;

                case nameof(RaygunRequestMessage.HttpMethod):
                    requestMessage.HttpMethod = property.AsString();
                    break;

                case nameof(RaygunRequestMessage.IPAddress):
                    requestMessage.IPAddress = property.AsString();
                    break;

                case nameof(RaygunRequestMessage.RawData):
                    requestMessage.RawData = property.AsString();
                    break;

                case nameof(RaygunRequestMessage.Headers):
                    requestMessage.Headers = property.AsDictionary();
                    break;

                case nameof(RaygunRequestMessage.QueryString):
                    requestMessage.QueryString = property.AsDictionary();
                    break;

                case nameof(RaygunRequestMessage.Form):
                    requestMessage.Form = property.AsDictionary();
                    break;

                case nameof(RaygunRequestMessage.Data):
                    requestMessage.Data = property.AsDictionary();
                    break;
                }
            }

            return(requestMessage);
        }
Ejemplo n.º 21
0
        public void FormFields()
        {
            var request = CreateWritableRequest();

            request.Form.Add("TestFormField1", "FormFieldValue");
            request.Form.Add("TestFormField2", "FormFieldValue");
            request.Form.Add("TestFormField3", "FormFieldValue");
            Assert.AreEqual(3, request.Form.Count);

            var message = new RaygunRequestMessage(request, new RaygunRequestMessageOptions());

            Assert.AreEqual(3, message.Form.Count);
            Assert.IsTrue(message.Form.Contains("TestFormField1"));
            Assert.IsTrue(message.Form.Contains("TestFormField2"));
            Assert.IsTrue(message.Form.Contains("TestFormField3"));
        }
Ejemplo n.º 22
0
        public void IgnoreCookie_EndsWith()
        {
            var request = new HttpRequest("test", "http://google.com", "test=test");

            request.Cookies.Add(new HttpCookie("TestCookieTest", "CookieValue"));
            request.Cookies.Add(new HttpCookie("TestCookie", "CookieValue"));
            request.Cookies.Add(new HttpCookie("CookieTest", "CookieValue"));
            Assert.AreEqual(3, request.Cookies.Count);

            var options = new RaygunRequestMessageOptions(Enumerable.Empty <string>(), Enumerable.Empty <string>(), new string[] { "*cookie" }, Enumerable.Empty <string>());
            var message = new RaygunRequestMessage(request, options);

            Assert.AreEqual(2, message.Cookies.Count);
            Assert.AreEqual(1, CookieCount(message, "TestCookieTest"));
            Assert.AreEqual(1, CookieCount(message, "CookieTest"));
        }
Ejemplo n.º 23
0
    public void IgnoreFormField_EndsWith()
    {
      var request = CreateWritableRequest();

      request.Form.Add("TestFormFieldTest", "FormFieldValue");
      request.Form.Add("TestFormField", "FormFieldValue");
      request.Form.Add("FormFieldTest", "FormFieldValue");
      Assert.AreEqual(3, request.Form.Count);

      var options = new RaygunRequestMessageOptions(new string[] { "*formfield" }, _empty, _empty, _empty);
      var message = new RaygunRequestMessage(request, options);

      Assert.AreEqual(2, message.Form.Count);
      Assert.IsTrue(message.Form.Contains("TestFormFieldTest"));
      Assert.IsTrue(message.Form.Contains("FormFieldTest"));
    }
Ejemplo n.º 24
0
        protected override async Task SendAsync(Exception exception, IList <string> tags, IDictionary userCustomData)
        {
            if (CanSend(exception))
            {
                RaygunRequestMessage currentRequestMessage = await BuildRequestMessage();

                RaygunResponseMessage currentResponseMessage = BuildResponseMessage();

                _currentHttpContext.Value = null;

                _currentRequestMessage.Value  = currentRequestMessage;
                _currentResponseMessage.Value = currentResponseMessage;

                await StripAndSend(exception, tags, userCustomData, null);

                FlagAsSent(exception);
            }
        }
Ejemplo n.º 25
0
        /// <summary>
        /// Asynchronously transmits an exception to Raygun.
        /// </summary>
        /// <param name="exception">The exception to deliver.</param>
        /// <param name="tags">A list of strings associated with the message.</param>
        /// <param name="userCustomData">A key-value collection of custom data that will be added to the payload.</param>
        /// <param name="userInfo">Information about the user including the identity string.</param>
        public override async Task SendInBackground(Exception exception, IList <string> tags, IDictionary userCustomData, RaygunIdentifierMessage userInfo)
        {
            if (CanSend(exception))
            {
                // We need to process the Request on the current thread,
                // otherwise it will be disposed while we are using it on the other thread.
                RaygunRequestMessage currentRequestMessage = await BuildRequestMessage();

                RaygunResponseMessage currentResponseMessage = BuildResponseMessage();

                var task = Task.Run(async() =>
                {
                    _currentRequestMessage.Value  = currentRequestMessage;
                    _currentResponseMessage.Value = currentResponseMessage;
                    await StripAndSend(exception, tags, userCustomData, userInfo);
                });
                FlagAsSent(exception);
                await task;
            }
        }
        public static async Task <RaygunRequestMessage> Build(HttpContext context, RaygunRequestMessageOptions options)
        {
            var request = context.Request;

            options = options ?? new RaygunRequestMessageOptions();

            var message = new RaygunRequestMessage
            {
                HostName    = request.Host.Value,
                Url         = request.GetDisplayUrl(),
                HttpMethod  = request.Method,
                IPAddress   = GetIpAddress(context.Connection),
                Form        = await GetForm(options, request),
                Cookies     = GetCookies(options, request),
                QueryString = GetQueryString(request),
                RawData     = GetRawData(options, request),
                Headers     = GetHeaders(request, options.IsHeaderIgnored)
            };

            return(message);
        }
        public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory)
        {
            if (logEvent.Level < _restrictedToMinimumLevel)
            {
                return;
            }

            if (_httpContextAccessor?.HttpContext == null)
            {
                return;
            }

            var options = new RaygunRequestMessageOptions
            {
                IsRawDataIgnored    = _raygunSettings.IsRawDataIgnored,
                UseXmlRawDataFilter = _raygunSettings.UseXmlRawDataFilter,
                IsRawDataIgnoredWhenFilteringFailed = _raygunSettings.IsRawDataIgnoredWhenFilteringFailed,
                UseKeyValuePairRawDataFilter        = _raygunSettings.UseKeyValuePairRawDataFilter
            };

            options.AddCookieNames(_raygunSettings.IgnoreCookieNames ?? Array.Empty <string>());
            options.AddHeaderNames(_raygunSettings.IgnoreHeaderNames ?? Array.Empty <string>());
            options.AddFormFieldNames(_raygunSettings.IgnoreFormFieldNames ?? Array.Empty <string>());
            options.AddQueryParameterNames(_raygunSettings.IgnoreQueryParameterNames ?? Array.Empty <string>());
            options.AddSensitiveFieldNames(_raygunSettings.IgnoreSensitiveFieldNames ?? Array.Empty <string>());
            options.AddServerVariableNames(_raygunSettings.IgnoreServerVariableNames ?? Array.Empty <string>());

            RaygunRequestMessage httpRequestMessage = RaygunAspNetCoreRequestMessageBuilder
                                                      .Build(_httpContextAccessor.HttpContext, options)
                                                      .GetAwaiter()
                                                      .GetResult();

            RaygunResponseMessage httpResponseMessage = RaygunAspNetCoreResponseMessageBuilder.Build(_httpContextAccessor.HttpContext);

            // The Raygun request/response messages are stored in the logEvent properties collection.
            // When the error is sent to Raygun, these messages are extracted from the known properties
            // and then removed so as to not duplicate data in the payload.
            logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty(RaygunRequestMessagePropertyName, httpRequestMessage, true));
            logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty(RaygunResponseMessagePropertyName, httpResponseMessage, true));
        }
Ejemplo n.º 28
0
        private static void SetHeaders(RaygunRequestMessage message, HttpRequestMessage request, Func <string, bool> ignored)
        {
            message.Headers = new Dictionary <string, string>();

            foreach (var header in request.Headers.Where(h => !ignored(h.Key)))
            {
                message.Headers[header.Key] = string.Join(",", header.Value);
            }

            try
            {
                if (request.Content.Headers.ContentLength.HasValue && request.Content.Headers.ContentLength.Value > 0)
                {
                    foreach (var header in request.Content.Headers)
                    {
                        message.Headers[header.Key] = string.Join(",", header.Value);
                    }
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Trace.WriteLine("Error retrieving Headers: {0}", ex.Message);
            }
        }
Ejemplo n.º 29
0
        public void HttpMethodTest()
        {
            var message = new RaygunRequestMessage(_defaultRequest, null);

            Assert.That(message.HttpMethod, Is.EqualTo("GET"));
        }
Ejemplo n.º 30
0
        public void UrlTest()
        {
            var message = new RaygunRequestMessage(_defaultRequest, null);

            Assert.That(message.Url, Is.EqualTo("/"));
        }