public void Download(Uri uri, object metaData, IParser parser)
 {
     uriParserPairs.Add(metaData, parser);
     var request = (HttpWebRequest)WebRequest.Create(uri);
     var state = new RequestState { Request = request, Metadata = metaData };
     request.BeginGetResponse(GetData, state);
 }
        public void Download(Uri targetUri, AsyncCallback callback)
        {
            var request = (HttpWebRequest)WebRequest.Create(targetUri);
            state = new RequestState { Request = request, stopTimer = false };

            request.BeginGetResponse(callback, state);

            timer = new Timer(x =>  {
                                        if (!state.stopTimer)
                                        {
                                            ((RequestState)x).Request.Abort();
                                        }
                                        timer.Dispose(); }, 
                                    state, 
                                    TimeSpan.FromSeconds(Settings.DefaultTimeOutSeconds), 
                                    TimeSpan.FromTicks(0));
        }
        public void DownloadPost(Uri targetUri, string key,  string data, AsyncCallback callback)
        {
            var request = (HttpWebRequest)WebRequest.Create(targetUri);
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            var state = new RequestState { Request = request };

            request.BeginGetRequestStream( ar =>
                                               {
                                                   var requestStream = request.EndGetRequestStream(ar);
                                                   using (var sw = new StreamWriter(requestStream))
                                                   {
                                                       sw.Write(String.Format("_method=POST&"));
                                                       sw.Write(String.Format("{0}={1}", key, data));
                                                   }

                                                   request.BeginGetResponse(callback, state);
                                               }, null);
        }