public RestClient():base()
{
-
+ //The maximum error response must be large because missing server hashes are return as a Conflivt (409) error response
+ //Any value above 2^21-1 will result in an empty response.
+ //-1 essentially ignores the maximum length
+ HttpWebRequest.DefaultMaximumErrorResponseLength = -1;
}
: base()
{
if (other==null)
+ //Log.ErrorFormat("[ERROR] No parameters provided to the rest client. \n{0}\n", other);
throw new ArgumentNullException("other");
Contract.EndContractBlock();
+ //The maximum error response must be large because missing server hashes are return as a Conflivt (409) error response
+ //Any value above 2^21-1 will result in an empty response.
+ //-1 essentially ignores the maximum length
+ HttpWebRequest.DefaultMaximumErrorResponseLength = -1;
+
+
CopyHeaders(other);
Timeout = other.Timeout;
Retries = other.Retries;
TimedOut = false;
var webRequest = base.GetWebRequest(address);
var request = (HttpWebRequest)webRequest;
+ request.CookieContainer=new CookieContainer();
request.ServicePoint.ConnectionLimit = 50;
if (IfModifiedSince.HasValue)
request.IfModifiedSince = IfModifiedSince.Value;
var uriString = String.Join("/", BaseAddress.TrimEnd('/'), actualAddress);
var task = Retry(() =>
- {
- var content = base.DownloadString(uriString);
+ {
+ var content = DownloadString(uriString);
if (StatusCode == HttpStatusCode.NoContent)
return String.Empty;
try
{
- var result = task.Result;
+ var result = task.Result;
return result;
}
RetryWithoutContent(address, retries, "HEAD");
}
- public void PutWithRetry(string address, int retries = 0)
+ public void PutWithRetry(string address, int retries = 0, string contentType=null)
{
- RetryWithoutContent(address, retries, "PUT");
+ RetryWithoutContent(address, retries, "PUT",contentType);
+ }
+
+ public void PostWithRetry(string address,string contentType)
+ {
+ RetryWithoutContent(address, 0, "POST",contentType);
}
public void DeleteWithRetry(string address,int retries=0)
Headers.Add(headerName,value);
}
- private void RetryWithoutContent(string address, int retries, string method)
+ private void RetryWithoutContent(string address, int retries, string method,string contentType=null)
{
if (address == null)
throw new ArgumentNullException("address");
var uriString = String.Join("/",BaseAddress ,actualAddress);
var uri = new Uri(uriString);
var request = GetWebRequest(uri);
+ if (contentType!=null)
+ {
+ request.ContentType = contentType;
+ request.ContentLength = 0;
+ }
request.Method = method;
if (ResponseHeaders!=null)
ResponseHeaders.Clear();
.ToDictionary(t => t.Name, t => t.Value);
return dict;
}
+
}
public class RetryException:Exception