Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 5b89ea7

Browse files
committed
Merge pull request #410 from KyleGobel/master
Adding async http string extension methods
2 parents 29cda70 + 8f0d99c commit 5b89ea7

File tree

1 file changed

+166
-0
lines changed

1 file changed

+166
-0
lines changed

src/ServiceStack.Text/HttpUtils.cs

Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,172 @@ public static string HeadFromUrl(this string url, string accept = "*/*",
198198
return SendStringToUrl(url, method: "HEAD", accept: accept, requestFilter: requestFilter, responseFilter: responseFilter);
199199
}
200200

201+
public static Task<string> GetStringFromUrlAsync(this string url, string accept = "*/*",
202+
Action<HttpWebRequest> requestFilter = null, Action<HttpWebResponse> responseFilter = null)
203+
{
204+
return SendStringToUrlAsync(url, accept: accept, requestFilter: requestFilter, responseFilter: responseFilter);
205+
}
206+
207+
public static Task<string> PostStringToUrlAsync(this string url, string requestBody = null,
208+
string contentType = null, string accept = "*/*",
209+
Action<HttpWebRequest> requestFilter = null, Action<HttpWebResponse> responseFilter = null)
210+
{
211+
return SendStringToUrlAsync(url, method: "POST",
212+
requestBody: requestBody, contentType: contentType,
213+
accept: accept, requestFilter: requestFilter, responseFilter: responseFilter);
214+
}
215+
216+
public static Task<string> PostToUrlAsync(this string url, string formData = null, string accept = "*/*",
217+
Action<HttpWebRequest> requestFilter = null, Action<HttpWebResponse> responseFilter = null)
218+
{
219+
return SendStringToUrlAsync(url, method: "POST",
220+
contentType: MimeTypes.FormUrlEncoded, requestBody: formData,
221+
accept: accept, requestFilter: requestFilter, responseFilter: responseFilter);
222+
}
223+
224+
public static Task<string> PostToUrlAsync(this string url, object formData = null, string accept = "*/*",
225+
Action<HttpWebRequest> requestFilter = null, Action<HttpWebResponse> responseFilter = null)
226+
{
227+
string postFormData = formData != null ? QueryStringSerializer.SerializeToString(formData) : null;
228+
229+
return SendStringToUrlAsync(url, method: "POST",
230+
contentType: MimeTypes.FormUrlEncoded, requestBody: postFormData,
231+
accept: accept, requestFilter: requestFilter, responseFilter: responseFilter);
232+
}
233+
234+
public static Task<string> PostJsonToUrlAsync(this string url, string json,
235+
Action<HttpWebRequest> requestFilter = null, Action<HttpWebResponse> responseFilter = null)
236+
{
237+
return SendStringToUrlAsync(url, method: "POST", requestBody: json, contentType: MimeTypes.Json, accept: MimeTypes.Json,
238+
requestFilter: requestFilter, responseFilter: responseFilter);
239+
}
240+
241+
public static Task<string> PostJsonToUrlAsync(this string url, object data,
242+
Action<HttpWebRequest> requestFilter = null, Action<HttpWebResponse> responseFilter = null)
243+
{
244+
return SendStringToUrlAsync(url, method: "POST", requestBody: data.ToJson(), contentType: MimeTypes.Json, accept: MimeTypes.Json,
245+
requestFilter: requestFilter, responseFilter: responseFilter);
246+
}
247+
248+
public static Task<string> PostXmlToUrlAsync(this string url, string xml,
249+
Action<HttpWebRequest> requestFilter = null, Action<HttpWebResponse> responseFilter = null)
250+
{
251+
return SendStringToUrlAsync(url, method: "POST", requestBody: xml, contentType: MimeTypes.Xml, accept: MimeTypes.Xml,
252+
requestFilter: requestFilter, responseFilter: responseFilter);
253+
}
254+
255+
public static Task<string> PutStringToUrlAsync(this string url, string requestBody = null,
256+
string contentType = null, string accept = "*/*",
257+
Action<HttpWebRequest> requestFilter = null, Action<HttpWebResponse> responseFilter = null)
258+
{
259+
return SendStringToUrlAsync(url, method: "PUT",
260+
requestBody: requestBody, contentType: contentType,
261+
accept: accept, requestFilter: requestFilter, responseFilter: responseFilter);
262+
}
263+
264+
public static Task<string> PutToUrlAsync(this string url, string formData = null, string accept = "*/*",
265+
Action<HttpWebRequest> requestFilter = null, Action<HttpWebResponse> responseFilter = null)
266+
{
267+
return SendStringToUrlAsync(url, method: "PUT",
268+
contentType: MimeTypes.FormUrlEncoded, requestBody: formData,
269+
accept: accept, requestFilter: requestFilter, responseFilter: responseFilter);
270+
}
271+
272+
public static Task<string> PutToUrlAsync(this string url, object formData = null, string accept = "*/*",
273+
Action<HttpWebRequest> requestFilter = null, Action<HttpWebResponse> responseFilter = null)
274+
{
275+
string postFormData = formData != null ? QueryStringSerializer.SerializeToString(formData) : null;
276+
277+
return SendStringToUrlAsync(url, method: "PUT",
278+
contentType: MimeTypes.FormUrlEncoded, requestBody: postFormData,
279+
accept: accept, requestFilter: requestFilter, responseFilter: responseFilter);
280+
}
281+
282+
public static Task<string> PutJsonToUrlAsync(this string url, string json,
283+
Action<HttpWebRequest> requestFilter = null, Action<HttpWebResponse> responseFilter = null)
284+
{
285+
return SendStringToUrlAsync(url, method: "PUT", requestBody: json, contentType: MimeTypes.Json, accept: MimeTypes.Json,
286+
requestFilter: requestFilter, responseFilter: responseFilter);
287+
}
288+
289+
public static Task<string> PutJsonToUrlAsync(this string url, object data,
290+
Action<HttpWebRequest> requestFilter = null, Action<HttpWebResponse> responseFilter = null)
291+
{
292+
return SendStringToUrlAsync(url, method: "PUT", requestBody: data.ToJson(), contentType: MimeTypes.Json, accept: MimeTypes.Json,
293+
requestFilter: requestFilter, responseFilter: responseFilter);
294+
}
295+
296+
public static Task<string> PutXmlToUrlAsync(this string url, string xml,
297+
Action<HttpWebRequest> requestFilter = null, Action<HttpWebResponse> responseFilter = null)
298+
{
299+
return SendStringToUrlAsync(url, method: "PUT", requestBody: xml, contentType: MimeTypes.Xml, accept: MimeTypes.Xml,
300+
requestFilter: requestFilter, responseFilter: responseFilter);
301+
}
302+
303+
public static Task<string> DeleteFromUrlAsync(this string url, string accept = "*/*",
304+
Action<HttpWebRequest> requestFilter = null, Action<HttpWebResponse> responseFilter = null)
305+
{
306+
return SendStringToUrlAsync(url, method: "DELETE", accept: accept, requestFilter: requestFilter, responseFilter: responseFilter);
307+
}
308+
309+
public static Task<string> OptionsFromUrlAsync(this string url, string accept = "*/*",
310+
Action<HttpWebRequest> requestFilter = null, Action<HttpWebResponse> responseFilter = null)
311+
{
312+
return SendStringToUrlAsync(url, method: "OPTIONS", accept: accept, requestFilter: requestFilter, responseFilter: responseFilter);
313+
}
314+
315+
public static Task<string> HeadFromUrlAsync(this string url, string accept = "*/*",
316+
Action<HttpWebRequest> requestFilter = null, Action<HttpWebResponse> responseFilter = null)
317+
{
318+
return SendStringToUrlAsync(url, method: "HEAD", accept: accept, requestFilter: requestFilter, responseFilter: responseFilter);
319+
}
320+
321+
public static Task<string> SendStringToUrlAsync(this string url, string method = null, string requestBody = null,
322+
string contentType = null, string accept = "*/*", Action<HttpWebRequest> requestFilter = null,
323+
Action<HttpWebResponse> responseFilter = null)
324+
{
325+
var webReq = (HttpWebRequest)WebRequest.Create(url);
326+
if (method != null)
327+
webReq.Method = method;
328+
if (contentType != null)
329+
webReq.ContentType = contentType;
330+
331+
webReq.Accept = accept;
332+
PclExport.Instance.AddCompression(webReq);
333+
334+
if (requestFilter != null)
335+
{
336+
requestFilter(webReq);
337+
}
338+
339+
if (requestBody != null)
340+
{
341+
using (var reqStream = PclExport.Instance.GetRequestStream(webReq))
342+
using (var writer = new StreamWriter(reqStream))
343+
{
344+
writer.Write(requestBody);
345+
}
346+
}
347+
348+
var taskWebRes = webReq.GetResponseAsync();
349+
350+
return taskWebRes.ContinueWith(task =>
351+
{
352+
var webRes = task.Result;
353+
354+
if (responseFilter != null)
355+
{
356+
responseFilter(webRes);
357+
}
358+
359+
using (var stream = webRes.GetResponseStream())
360+
using (var reader = new StreamReader(stream))
361+
{
362+
return reader.ReadToEnd();
363+
}
364+
});
365+
}
366+
201367
public static string SendStringToUrl(this string url, string method = null,
202368
string requestBody = null, string contentType = null, string accept = "*/*",
203369
Action<HttpWebRequest> requestFilter = null, Action<HttpWebResponse> responseFilter = null)

0 commit comments

Comments
 (0)