public Response Send(Request request, Action <long[]> onProgress = null) { try { this.request = request; response = null; allDone.Reset(); foreach (var h in request.Headers) { this.Headers[h.Key] = h.Value; } this.UploadStringCompleted += downloadCompleted; this.DownloadStringCompleted += downloadCompleted; this.OpenWriteCompleted += openWriteCompleted; this.WriteStreamClosed += writeStreamClosed; var contentType = request.GetHeader("Content-Type"); if (contentType != null && contentType.Contains("application/octet-stream")) { this.OpenWriteAsync(request.Uri, request.Method); } else { if (request.Content.Length == 0 && request.Method == "GET") { this.DownloadStringAsync(request.Uri); } else { using (var reader = new StreamReader(request.Content)) { var data = reader.ReadToEnd(); this.UploadStringAsync(request.Uri, request.Method, data); } } } allDone.WaitOne(); return(response); } catch (Exception) { throw; } finally { if (request != null) { request.Dispose(); } if (httpWebResponse != null) { httpWebResponse.Dispose(); } } }
public Response Send(Request request, Action<long[]> onProgress = null) { try { this.request = request; response = null; allDone.Reset(); foreach (var h in request.Headers) this.Headers[h.Key] = h.Value; this.UploadStringCompleted += downloadCompleted; this.DownloadStringCompleted += downloadCompleted; this.OpenWriteCompleted += openWriteCompleted; this.WriteStreamClosed += writeStreamClosed; var contentType = request.GetHeader("Content-Type"); if (contentType != null && contentType.Contains("application/octet-stream")) { this.OpenWriteAsync(request.Uri, request.Method); } else { if (request.Content.Length == 0 && request.Method=="GET") { this.DownloadStringAsync(request.Uri); } else { using (var reader = new StreamReader(request.Content)) { var data = reader.ReadToEnd(); this.UploadStringAsync(request.Uri, request.Method, data); } } } allDone.WaitOne(); return response; } catch (Exception) { throw; } finally { if (request != null) request.Dispose(); if (httpWebResponse != null) httpWebResponse.Dispose(); } }