2012-10-23 28 views
10

रीडायरेक्ट नहीं करता है जब Firebug का उपयोग कर मैं देख यह इसWebClient स्वचालित रूप से

POST //The normal post request 
GET //Automatically made after the login 
GET //Automatically made after the login 
GET //Automatically made after the login 

की तरह है कि जब नीचे यह स्वत: प्राप्त अनुरोधों ब्राउज़र है कि नहीं था मेरे कोड का उपयोग कर एक पोस्ट अनुरोध करने वाले प्रवेश प्रक्रिया प्रवेश करने करते हुए।

मेरी WebClient हैंडलर

using System; 
using System.Net; 

namespace Test 
{ 
    class HttpHandler : WebClient 
    { 
     private CookieContainer _mContainer = new CookieContainer(); 

     protected override WebRequest GetWebRequest(Uri address) 
     { 
      var request = base.GetWebRequest(address); 
      if (request is HttpWebRequest) 
      { 
       (request as HttpWebRequest).CookieContainer = _mContainer; 
      } 
      return request; 
     } 

     protected override WebResponse GetWebResponse(WebRequest request) 
     { 
      var response = base.GetWebResponse(request); 
      if (response is HttpWebResponse) 
       _mContainer.Add((response as HttpWebResponse).Cookies); 
      return response; 
     } 

     public void ClearCookies() 
     { 
      _mContainer = new CookieContainer(); 
     } 
    } 
} 

कोड

private static async Task<byte[]> LoginAsync(string username, string password) 
{ 
    var postData = new NameValueCollection(); 
    var uri = new Uri(string.Format("http://{0}/", ServerName)); 

    postData.Add("name", username); 
    postData.Add("password", password); 

    return await HttpHandler.UploadValuesTaskAsync(uri, postData); 
} 

का उपयोग करते हुए जब अपने आवेदन में यह केवल पोस्ट अनुरोध और नहीं मिल शेष अनुरोधों कर रहा है के कनेक्शन ट्रैक करने के लिए कोशिश कर रहा। [यह ब्रॉसर में स्वचालित रूप से बनाया गया है]

+0

क्या यह सिंक्रोनस संस्करण में भी विफल रहता है? AllowAutoRedirect के साथ, मैं इसे काम करने की उम्मीद करता हूं ... संभवतः यह POST से पुनर्निर्देशित करने में एक समस्या है? –

उत्तर

1

यह आश्चर्यजनक नहीं होना चाहिए, HttpWebRequest ब्राउज़र नहीं है। यदि आपको इन रीडायरेक्ट को करने की आवश्यकता है, तो HttpWebResponse.StatusCode देखें, और redirect code in the 300's पर कोई अन्य अनुरोध करें। 10.3 रीडायरेक्शन 3xx के तहत लिंक से नोट:

स्थिति कोड का यह वर्ग इंगित करता है कि अनुरोध को पूरा करने के लिए उपयोगकर्ता एजेंट द्वारा आगे की कार्रवाई की जानी चाहिए। कार्रवाई की आवश्यकता उपयोगकर्ता एजेंट द्वारा उपयोगकर्ता के साथ बातचीत के बिना की जा सकती है अगर केवल दूसरे अनुरोध में उपयोग की जाने वाली विधि GET या HEAD है। एक ग्राहक को अनंत पुनर्निर्देशन loops का पता लगाना चाहिए, क्योंकि ऐसे loops प्रत्येक पुनर्निर्देशन के लिए नेटवर्क यातायात उत्पन्न करते हैं।

+8

, मैं * * यह काम उम्मीद थी HttpWebRequest.AllowAutoRedirect को देखते हुए करने के लिए ... –

+1

webclient Have AllowAutoRedirect सच स्वचालित रूप से –

+0

@dbaseman मैं WebClient के बारे में पूछ रहा हूँ नहीं ली गई HttpWebResponse और अनुरोध –

7

सही

var request = base.GetWebRequest(address); 

तहत

request.AllowAutoRedirect = true; 

जोड़ने की कोशिश यह मेरे लिए कुछ इसी तरह की समस्या का समाधान भी है कि autoredirect डिफ़ॉल्ट रूप से चालू माना जाता है।

संबंधित मुद्दे