// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
+using System.Collections.Generic;
+using System.Security.Authentication;
+using System.Security.Cryptography.X509Certificates;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Specialized;
using System.Net.Http.Headers;
+using System.Net.Security;
+using System.Linq;
namespace System.Net.Http
{
wr.KeepAlive = request.Headers.ConnectionClose != true;
}
- wr.ServicePoint.Expect100Continue = request.Headers.ExpectContinue == true;
-
if (allowAutoRedirect) {
wr.AllowAutoRedirect = true;
wr.MaximumAutomaticRedirections = maxAutomaticRedirections;
if (useProxy) {
wr.Proxy = proxy;
+ } else {
+ // Disables default WebRequest.DefaultWebProxy value
+ wr.Proxy = null;
}
+ wr.ServicePoint.Expect100Continue = request.Headers.ExpectContinue == true;
+
// Add request headers
var headers = wr.Headers;
foreach (var header in request.Headers) {
- foreach (var value in header.Value) {
- headers.AddValue (header.Key, value);
+ var values = header.Value;
+ if (header.Key == "Host") {
+ //
+ // Host must be explicitly set for HttpWebRequest
+ //
+ wr.Host = request.Headers.Host;
+ continue;
+ }
+
+ if (header.Key == "Transfer-Encoding") {
+ // Chunked Transfer-Encoding is never set for HttpWebRequest. It's detected
+ // from ContentLength by HttpWebRequest
+ values = values.Where (l => l != "chunked");
}
+
+ var values_formated = HttpRequestHeaders.GetSingleHeaderString (header.Key, values);
+ if (values_formated == null)
+ continue;
+
+ headers.AddInternal (header.Key, values_formated);
}
return wr;
foreach (var header in content.Headers) {
foreach (var value in header.Value) {
- headers.AddValue (header.Key, value);
+ headers.AddInternal (header.Key, value);
}
}
wrequest.ContentLength = content.Headers.ContentLength.Value;
}
+ wrequest.ResendContentFactory = content.CopyTo;
+
var stream = await wrequest.GetRequestStreamAsync ().ConfigureAwait (false);
await request.Content.CopyToAsync (stream).ConfigureAwait (false);
} else if (HttpMethod.Post.Equals (request.Method) || HttpMethod.Put.Equals (request.Method) || HttpMethod.Delete.Equals (request.Method)) {
}
} catch (WebException we) {
if (we.Status != WebExceptionStatus.RequestCanceled)
- throw;
+ throw new HttpRequestException ("An error occurred while sending the request", we);
+ } catch (System.IO.IOException ex) {
+ throw new HttpRequestException ("An error occurred while sending the request", ex);
}
if (cancellationToken.IsCancellationRequested) {
return CreateResponseMessage (wresponse, request, cancellationToken);
}
+
+#if NETSTANDARD
+ public bool CheckCertificateRevocationList {
+ get {
+ throw new NotImplementedException ();
+ }
+ set {
+ throw new NotImplementedException ();
+ }
+ }
+
+ public X509CertificateCollection ClientCertificates {
+ get {
+ throw new NotImplementedException ();
+ }
+ }
+
+ public ICredentials DefaultProxyCredentials {
+ get {
+ throw new NotImplementedException ();
+ }
+ set {
+ throw new NotImplementedException ();
+ }
+ }
+
+ public int MaxConnectionsPerServer {
+ get {
+ throw new NotImplementedException ();
+ }
+ set {
+ throw new NotImplementedException ();
+ }
+ }
+
+ public int MaxResponseHeadersLength {
+ get {
+ throw new NotImplementedException ();
+ }
+ set {
+ throw new NotImplementedException ();
+ }
+ }
+
+ public IDictionary<string,object> Properties {
+ get {
+ throw new NotImplementedException ();
+ }
+ }
+
+ public Func<HttpRequestMessage,X509Certificate2,X509Chain,SslPolicyErrors,bool> ServerCertificateCustomValidationCallback {
+ get {
+ throw new NotImplementedException ();
+ }
+ set {
+ throw new NotImplementedException ();
+ }
+ }
+
+ public SslProtocols SslProtocols {
+ get {
+ throw new NotImplementedException ();
+ }
+ set {
+ throw new NotImplementedException ();
+ }
+ }
+
+#endif
}
}