मैं HttpWebRequest का उपयोग कर यूआरएल के अस्तित्व को सत्यापित करने की कोशिश कर रहा हूं।HttpWebRequest ने HttpStatusCode.NotFound को वापस करने के बजाय अपवाद फेंक दिया क्यों है?
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Url);
request.Method = "HEAD";
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
return response.StatusCode;
}
हालांकि, अगर यूआरएल वास्तव में टूट गया है, यह एक प्रतिक्रिया लौटाएँ नहीं कर रहा है, तो इसकी बजाय अपवाद फेंक रहा है: मैं कुछ उदाहरण है कि मूल रूप से यह कर पाया।
try
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Url);
request.Method = "HEAD";
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
return response.StatusCode;
}
}
catch (System.Net.WebException ex)
{
var response = ex.Response as HttpWebResponse;
return response == null ? HttpStatusCode.InternalServerError : response.StatusCode;
}
जो अंत में मैं क्या चाहते हो रहा है:
मैं इस के लिए मेरे कोड को संशोधित किया।
लेकिन मुझे यह जानना है कि अनुरोध नॉटफॉउंड स्थिति कोड के साथ प्रतिक्रिया वापस करने के बजाय अपवाद फेंकने का अनुरोध क्यों है?
हालांकि नेट फ्रेमवर्क लेखकों के भाग पर इस खराब डिज़ाइन विकल्प से HttpWebRequest/Response का उपयोग करके कोड को सहेजने के लिए यह कम से कम काम है, सही समाधान HttpClient का उपयोग करना है, जो 4xx और 5xx स्थिति कोड पर नहीं फेंकता है। असाधारण परिस्थितियों के लिए अपवाद हैं, और इसे पकड़ने के लिए फेंकना और आगे बढ़ना जैसे कि यह ठीक है, प्रदर्शन के लिए बदसूरत और बुरा है, विशेष रूप से यह एक बेहतर विकल्प है जो इसे पूरी तरह से टालता है। https://msdn.microsoft.com/en-us/library/hh138242(v=vs.118).aspx –
यह सत्य प्रतीत नहीं होता है; मैं एक प्रोजेक्ट में एचटीपी क्लाइंट का उपयोग कर रहा हूं और एक यूआरएल को कॉल करते समय जो मौजूद नहीं है जो 404 स्टेटस कोड देता है, क्लाइंट 404 स्टेटस कोड के साथ प्रतिक्रिया लौटने के बजाय अपवाद फेंक रहा है। क्या इसे रोकने के लिए httpclient का उपयोग करने में एक अतिरिक्त कदम है? – SelAromDotNet