When executing requests on multiple threads with 1 restclient, there is sometimes an exception

218 views
Skip to first unread message

Nick Van Eeckhout

unread,
Apr 4, 2013, 10:37:33 AM4/4/13
to rest...@googlegroups.com
I already posted following issue on github:

This is a possible fix:

---
 RestSharp/RestClient.Async.cs     |  4 ----
 RestSharp/RestClient.Sync.cs      |  4 ----
 RestSharp/RestClient.cs           |  7 ++++++-
 RestSharp/RestClientExtensions.cs | 18 ++++++++++++++++++
 4 files changed, 24 insertions(+), 9 deletions(-)

diff --git a/RestSharp/RestClient.Async.cs b/RestSharp/RestClient.Async.cs
index 94a56fd..95acde0 100644
--- a/RestSharp/RestClient.Async.cs
+++ b/RestSharp/RestClient.Async.cs
@@ -73,10 +73,6 @@ namespace RestSharp
  var http = HttpFactory.Create();
  AuthenticateIfNeeded(this, request);
 
- // add Accept header based on registered deserializers
- var accepts = string.Join(", ", AcceptTypes.ToArray());
- this.AddDefaultParameter("Accept", accepts, ParameterType.HttpHeader);
-
  ConfigureHttp(request, http);
 
  var asyncHandle = new RestRequestAsyncHandle();
diff --git a/RestSharp/RestClient.Sync.cs b/RestSharp/RestClient.Sync.cs
index c8db267..66df054 100644
--- a/RestSharp/RestClient.Sync.cs
+++ b/RestSharp/RestClient.Sync.cs
@@ -62,10 +62,6 @@ namespace RestSharp
  {
  AuthenticateIfNeeded(this, request);
 
- // add Accept header based on registered deserializers
- var accepts = string.Join(", ", AcceptTypes.ToArray());
- this.AddDefaultParameter("Accept", accepts, ParameterType.HttpHeader);
-
  IRestResponse response = new RestResponse();
  try
  {
diff --git a/RestSharp/RestClient.cs b/RestSharp/RestClient.cs
index 5501e63..8b0bc0d 100644
--- a/RestSharp/RestClient.cs
+++ b/RestSharp/RestClient.cs
@@ -90,6 +90,9 @@ namespace RestSharp
  if (contentType != "*")
  {
  AcceptTypes.Add(contentType);
+                // add Accept header based on registered deserializers
+                var accepts = string.Join(", ", AcceptTypes.ToArray());
+                this.AddDefaultParameter("Accept", accepts, ParameterType.HttpHeader);
  }
  }
 
@@ -101,6 +104,7 @@ namespace RestSharp
  {
  ContentHandlers.Remove(contentType);
  AcceptTypes.Remove(contentType);
+    this.RemoveDefaultParameter("Accept");
  }
 
  /// <summary>
@@ -109,7 +113,8 @@ namespace RestSharp
  public void ClearHandlers()
  {
  ContentHandlers.Clear();
- AcceptTypes.Clear();
+            AcceptTypes.Clear();
+            this.RemoveDefaultParameter("Accept");
  }
 
  /// <summary>
diff --git a/RestSharp/RestClientExtensions.cs b/RestSharp/RestClientExtensions.cs
index 40ba914..4f1c3fc 100644
--- a/RestSharp/RestClientExtensions.cs
+++ b/RestSharp/RestClientExtensions.cs
@@ -1,4 +1,5 @@
 using System;
+using System.Linq;
 
 namespace RestSharp
 {
@@ -209,10 +210,27 @@ namespace RestSharp
  throw new NotSupportedException(
  "Cannot set request body from default headers. Use Request.AddBody() instead.");
  }
+            // If parameter already exists, remove it first.
+            restClient.RemoveDefaultParameter(p.Name);
 
  restClient.DefaultParameters.Add(p);
  }
 
+        /// <summary>
+        /// Removes a parameter from the default parameters that are used on every request made with this client instance
+        /// </summary>
+        /// <param name="restClient">The IRestClient instance</param>
+        /// <param name="name">The name of the parameter that needs to be removed</param>
+        /// <returns></returns>
+        public static void RemoveDefaultParameter(this IRestClient restClient, string name)
+        {
+            var parameter = restClient.DefaultParameters.SingleOrDefault(p => p.Name.Equals(name, StringComparison.OrdinalIgnoreCase));
+            if (parameter != null)
+            {
+                restClient.DefaultParameters.Remove(parameter);
+            }
+        }
+
  /// <summary>
  /// Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT)
  /// Used on every request made by this client instance
-- 
Reply all
Reply to author
Forward
0 new messages