मेरे पास एक तरीका है जो उरी बनाने की कोशिश करता है और फिर इसे साफ़ करता है (टुकड़े हटा देता है, कुछ डोमेन और क्वेरी स्ट्रिंग पैटर्न इत्यादि को छोड़ देता है)। विधि इस तरह दिखती है:Uri.TryCreate UriFormatException फेंकता है?
static public bool TryCreateCleanUri(Uri baseUri, string relstr, out Uri result)
{
if (!Uri.TryCreate(baseUri, relstr, out result))
{
return false;
}
return CleanupUri(result, out result);
}
यह विधि महीनों के लिए ठीक काम कर रही है। लेकिन कल रात यह असफल रहा। Uri.TryCreate() एक अपवाद फेंक दिया! यहाँ स्टैक ट्रेस है: Uri.TryCreate(Uri, String, out Uri)
के लिए
ERROR: Unhandled exception caught. Program terminating.
System.UriFormatException: Invalid URI: The hostname could not be parsed.
at System.Uri.CreateHostStringHelper(String str, UInt16 idx, UInt16 end, Flags& flags, String& scopeId)
at System.Uri.CreateHostString()
at System.Uri.GetComponentsHelper(UriComponents uriComponents, UriFormat uriFormat)
at System.Uri.CombineUri(Uri basePart, String relativePart, UriFormat uriFormat)
at System.Uri.GetCombinedString(Uri baseUri, String relativeStr, Boolean dontEscape, String& result)
at System.Uri.ResolveHelper(Uri baseUri, Uri relativeUri, String& newUriString, Boolean& userEscaped, UriFormatException& e)
at System.Uri.TryCreate(Uri baseUri, Uri relativeUri, Uri& result)
at System.Uri.TryCreate(Uri baseUri, String relativeUri, Uri& result)
प्रलेखन का कहना है कि वापसी मान True
यदि सफल, False
अन्यथा है, लेकिन यह अपवाद के बारे में चुप है। हालांकि, Uri.TryCreate(Uri, Uri, out Uri)
के लिए दस्तावेज़ का कहना है:
इस विधि यूआरआई निर्माण करती है, विहित प्रपत्र में डालता है यह, और यह सत्यापित करता है। यदि एक अनचाहे अपवाद होता है, यह विधि इसे पकड़ती है। यदि आप चाहते हैं तो उरी बनाएं और अपवाद प्राप्त करें उरी रचनाकारों में से एक का उपयोग करें।
स्टैक ट्रेस दिखाता है कि अपवाद को Uri.TryCreate(Uri, Uri, out Uri)
में फेंक दिया गया था, जो दस्तावेज के अनुसार नहीं होना चाहिए।
यह एक बहुत ही दुर्लभ घटना है। मैं महीनों के लिए उस कोड का उपयोग कर रहा हूं, इसके माध्यम से सचमुच अरबों यूआरएल चला रहा हूं, और अब तक कोई समस्या नहीं आई है। दुर्भाग्यवश मुझे नहीं पता कि चीजों के संयोजन ने समस्या का कारण बना दिया। मैं एक टेस्ट केस बनाने की उम्मीद कर रहा हूं जो त्रुटि दिखाता है।
क्या यह Uri.TryCreate
में ज्ञात बग है, या क्या मुझे कुछ याद आ रही है?
क्या आप जानते हैं कि विफलता के कारण यह किस URL को पार्स करने का प्रयास कर रहा है? –
अगर मुझे पता था, तो मैं इसे पोस्ट करता। –
"TryCreate" क्या कर रहा है यह जानने के लिए परावर्तक का उपयोग करें – DevinB