@@ -71,46 +71,46 @@ public virtual ElasticsearchResponse<Stream> DeleteSync(Uri uri, byte[] data, IR
7171
7272 private ElasticsearchResponse < Stream > HeaderOnlyRequest ( Uri uri , string method , IRequestConnectionConfiguration requestSpecificConfig )
7373 {
74- var r = this . CreateHttpWebRequest ( uri , method , requestSpecificConfig ) ;
74+ var r = this . CreateHttpWebRequest ( uri , method , null , requestSpecificConfig ) ;
7575 return this . DoSynchronousRequest ( r , requestSpecificConfig : requestSpecificConfig ) ;
7676 }
7777
7878 private ElasticsearchResponse < Stream > BodyRequest ( Uri uri , byte [ ] data , string method , IRequestConnectionConfiguration requestSpecificConfig )
7979 {
80- var r = this . CreateHttpWebRequest ( uri , method , requestSpecificConfig ) ;
80+ var r = this . CreateHttpWebRequest ( uri , method , data , requestSpecificConfig ) ;
8181 return this . DoSynchronousRequest ( r , data , requestSpecificConfig ) ;
8282 }
8383
8484 public virtual Task < ElasticsearchResponse < Stream > > Get ( Uri uri , IRequestConnectionConfiguration requestSpecificConfig = null )
8585 {
86- var r = this . CreateHttpWebRequest ( uri , "GET" , requestSpecificConfig ) ;
86+ var r = this . CreateHttpWebRequest ( uri , "GET" , null , requestSpecificConfig ) ;
8787 return this . DoAsyncRequest ( r , requestSpecificConfig : requestSpecificConfig ) ;
8888 }
8989 public virtual Task < ElasticsearchResponse < Stream > > Head ( Uri uri , IRequestConnectionConfiguration requestSpecificConfig = null )
9090 {
91- var r = this . CreateHttpWebRequest ( uri , "HEAD" , requestSpecificConfig ) ;
91+ var r = this . CreateHttpWebRequest ( uri , "HEAD" , null , requestSpecificConfig ) ;
9292 return this . DoAsyncRequest ( r , requestSpecificConfig : requestSpecificConfig ) ;
9393 }
9494 public virtual Task < ElasticsearchResponse < Stream > > Post ( Uri uri , byte [ ] data , IRequestConnectionConfiguration requestSpecificConfig = null )
9595 {
96- var r = this . CreateHttpWebRequest ( uri , "POST" , requestSpecificConfig ) ;
96+ var r = this . CreateHttpWebRequest ( uri , "POST" , data , requestSpecificConfig ) ;
9797 return this . DoAsyncRequest ( r , data , requestSpecificConfig : requestSpecificConfig ) ;
9898 }
9999
100100 public virtual Task < ElasticsearchResponse < Stream > > Put ( Uri uri , byte [ ] data , IRequestConnectionConfiguration requestSpecificConfig = null )
101101 {
102- var r = this . CreateHttpWebRequest ( uri , "PUT" , requestSpecificConfig ) ;
102+ var r = this . CreateHttpWebRequest ( uri , "PUT" , data , requestSpecificConfig ) ;
103103 return this . DoAsyncRequest ( r , data , requestSpecificConfig : requestSpecificConfig ) ;
104104 }
105105
106106 public virtual Task < ElasticsearchResponse < Stream > > Delete ( Uri uri , byte [ ] data , IRequestConnectionConfiguration requestSpecificConfig = null )
107107 {
108- var r = this . CreateHttpWebRequest ( uri , "DELETE" , requestSpecificConfig ) ;
108+ var r = this . CreateHttpWebRequest ( uri , "DELETE" , data , requestSpecificConfig ) ;
109109 return this . DoAsyncRequest ( r , data , requestSpecificConfig : requestSpecificConfig ) ;
110110 }
111111 public virtual Task < ElasticsearchResponse < Stream > > Delete ( Uri uri , IRequestConnectionConfiguration requestSpecificConfig = null )
112112 {
113- var r = this . CreateHttpWebRequest ( uri , "DELETE" , requestSpecificConfig ) ;
113+ var r = this . CreateHttpWebRequest ( uri , "DELETE" , null , requestSpecificConfig ) ;
114114 return this . DoAsyncRequest ( r , requestSpecificConfig : requestSpecificConfig ) ;
115115 }
116116
@@ -127,9 +127,9 @@ private static void ThreadTimeoutCallback(object state, bool timedOut)
127127 }
128128
129129
130- protected virtual HttpWebRequest CreateHttpWebRequest ( Uri uri , string method , IRequestConnectionConfiguration requestSpecificConfig )
130+ protected virtual HttpWebRequest CreateHttpWebRequest ( Uri uri , string method , byte [ ] data , IRequestConnectionConfiguration requestSpecificConfig )
131131 {
132- var myReq = this . CreateWebRequest ( uri , method , requestSpecificConfig ) ;
132+ var myReq = this . CreateWebRequest ( uri , method , data , requestSpecificConfig ) ;
133133 this . SetBasicAuthorizationIfNeeded ( myReq ) ;
134134 this . SetProxyIfNeeded ( myReq ) ;
135135 return myReq ;
@@ -160,7 +160,7 @@ private void SetBasicAuthorizationIfNeeded(HttpWebRequest myReq)
160160 //}
161161 }
162162
163- protected virtual HttpWebRequest CreateWebRequest ( Uri uri , string method , IRequestConnectionConfiguration requestSpecificConfig )
163+ protected virtual HttpWebRequest CreateWebRequest ( Uri uri , string method , byte [ ] data , IRequestConnectionConfiguration requestSpecificConfig )
164164 {
165165 //TODO append global querystring
166166 //var url = this._CreateUriString(path);
@@ -178,6 +178,14 @@ protected virtual HttpWebRequest CreateWebRequest(Uri uri, string method, IReque
178178 myReq . Timeout = timeout ; // 1 minute timeout.
179179 myReq . ReadWriteTimeout = timeout ; // 1 minute timeout.
180180 myReq . Method = method ;
181+
182+ //WebRequest won't send Content-Length: 0 for empty bodies
183+ //which goes against RFC's and might break i.e IIS when used as a proxy.
184+ //see: https://github.com/elasticsearch/elasticsearch-net/issues/562
185+ var m = method . ToLower ( ) ;
186+ if ( m != "head" && m != "get" && ( data == null || data . Length == 0 ) )
187+ myReq . ContentLength = 0 ;
188+
181189 return myReq ;
182190 }
183191
0 commit comments