|
7 | 7 | using Elasticsearch.Net.Exceptions; |
8 | 8 | using Elasticsearch.Net.Providers; |
9 | 9 | using Elasticsearch.Net.Serialization; |
| 10 | +using PUrify; |
10 | 11 |
|
11 | 12 | namespace Elasticsearch.Net.Connection |
12 | 13 | { |
@@ -89,7 +90,7 @@ public ElasticsearchResponse DoRequest( |
89 | 90 |
|
90 | 91 | try |
91 | 92 | { |
92 | | - var uri = new Uri(baseUri, path); |
| 93 | + var uri = CreateUriToPath(baseUri, path); |
93 | 94 | response = _doRequest(method, uri, postData); |
94 | 95 | if (response != null && response.SuccessOrKnownError) |
95 | 96 | return response; |
@@ -160,7 +161,7 @@ public Task<ElasticsearchResponse> DoRequestAsync( |
160 | 161 | var postData = PostData(data); |
161 | 162 | int initialSeed; |
162 | 163 | var baseUri = this._connectionPool.GetNext(seed, out initialSeed); |
163 | | - var uri = new Uri(baseUri, path); |
| 164 | + var uri = CreateUriToPath(baseUri, path); |
164 | 165 | return _doRequestAsync(method, uri, postData).ContinueWith(t=> |
165 | 166 | { |
166 | 167 | if (t.IsCanceled) |
@@ -208,7 +209,19 @@ private Task<ElasticsearchResponse> _doRequestAsync(string method, Uri uri, byte |
208 | 209 | } |
209 | 210 | throw new Exception("Unknown HTTP method " + method); |
210 | 211 | } |
211 | | - |
| 212 | + |
| 213 | + private Uri CreateUriToPath(Uri baseUri, string path) |
| 214 | + { |
| 215 | + var s = this.Settings; |
| 216 | + if (s.QueryStringParameters != null) |
| 217 | + { |
| 218 | + var tempUri = new Uri(baseUri, path); |
| 219 | + var qs = s.QueryStringParameters.ToQueryString(tempUri.Query.IsNullOrEmpty() ? "?" : "&"); |
| 220 | + path += qs; |
| 221 | + } |
| 222 | + var uri = path.IsNullOrEmpty() ? baseUri : new Uri(baseUri, path); |
| 223 | + return uri.Purify(); |
| 224 | + } |
212 | 225 |
|
213 | 226 | private byte[] PostData(object data) |
214 | 227 | { |
|
0 commit comments