@@ -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