2010-04-16 10 views
18

मैं दो अलग अलग WebException की ठीक से संभाल करने की कोशिश कर रहा हूँ।हैंडलिंग दो WebException को ठीक से

मूल रूप से वे बुला WebClient.DownloadFile(string address, string fileName)

AFAIK के बाद नियंत्रित किया जाता है, अब तक वहाँ दो मैं संभाल करने के लिए कर रहे हैं, दोनों WebException की:

  • दूरदराज के नाम हल नहीं किया जा सकता है (यानी कोई नेटवर्क कनेक्टिविटी फ़ाइल डाउनलोड करने के लिए)
  • (404 सर्वर तक पहुँचने के लिए) फ़ाइल नहीं nound (यानी फ़ाइल सर्वर पर मौजूद नहीं है)

और भी हो सकता है लेकिन यह अब तक मुझे सबसे महत्वपूर्ण मिला है।

तो मैं कैसे ठीक से इस संभाल चाहिए, क्योंकि वे दोनों WebException के हैं, लेकिन मैं अलग तरह से ऊपर प्रत्येक मामले को संभालने के लिए चाहते हैं।

यह वही है मैं अब तक है:

try 
{ 
    using (var client = new WebClient()) 
    { 
     client.DownloadFile("..."); 
    } 
} 
catch(InvalidOperationException ioEx) 
{ 
    if (ioEx is WebException) 
    { 
     if (ioEx.Message.Contains("404") 
     { 
      //handle 404 
     } 
     if (ioEx.Message.Contains("remote name could not") 
     { 
      //handle file doesn't exist 
     } 
    } 
} 

आप मुझे संदेश जाँच कर रहा हूँ देखने के लिए यह है WebException किस प्रकार देख सकते हैं। मुझे लगता है कि ऐसा करने के लिए एक बेहतर या अधिक सटीक तरीका है?

धन्यवाद

+0

उत्तर का अनुमान अपवाद की स्थिति की जांच के बजाय वेब अपवाद का उपयोग करने में, '(यदि wEx.Status == WebExceptionStatus.Something) {// संभाल} (wEx.Status अगर == WebExceptionStatus.SomethingElse के रूप में की तर्ज पर है) {// हैंडल कि} ' – baron

उत्तर

26

पर this MSDN article आधार पर, आप निम्नलिखित लाइनों के साथ कुछ कर सकते हैं:

try 
{ 
    // try to download file here 
} 
catch (WebException ex) 
{ 
    if (ex.Status == WebExceptionStatus.ProtocolError) 
    { 
     if (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.NotFound) 
     { 
      // handle the 404 here 
     } 
    } 
    else if (ex.Status == WebExceptionStatus.NameResolutionFailure) 
    { 
     // handle name resolution failure 
    } 
} 

मुझे विश्वास है कि WebExceptionStatus.NameResolutionFailure त्रुटि आप देख रहे हैं है नहीं कर रहा हूँ, लेकिन आप अपवाद जांच कर सकते हैं कि फेंक दिया जाता है और निर्धारित करता है कि उस त्रुटि के लिए WebExceptionStatus क्या है।

+0

मैंने यहां भी देखा: http://msdn.microsoft.com/en-us/library/system.net.webexceptionstatus.aspx जो आपको सभी संभावित स्थिति दिखाता है। आप उन दो स्थितियों के साथ सही हैं 'वे मुझे हर स्थिति में मिला है। मैंने किसी अन्य अपवाद स्थिति के लिए 404 अलग-अलग और फिर अन्यथा इलाज करने का निर्णय लिया है - क्योंकि अन्य सभी कनेक्शन और नेटवर्क कनेक्टिविटी के साथ ऐसा करने लगते हैं, जिसे मैं एक साथ समूहित करूंगा। – baron

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