2009-05-29 13 views

उत्तर

44

तुम एक यूआरएल को मान्य करने के Uri.TryCreate उपयोग कर सकते हैं:

public bool IsValidUri(string uri) 
{ 
    Uri validatedUri; 
    return Uri.TryCreate(uri, UriKind.RelativeOrAbsolute, out validatedUri); 
} 

टिप्पणियों का सुझाव है कि TryCreate सिर्फ अपवाद एक स्तर नीचे से निपटने ले जाता है। हालांकि, मैंने स्रोत कोड की जांच की और पाया कि यह मामला नहीं है। TryCreate के अंदर कोई प्रयास/पकड़ नहीं है, यह एक कस्टम पार्सर का उपयोग करता है जिसे फेंकना नहीं चाहिए।

+0

यह सुझाए गए प्रयास/पकड़ कार्यान्वयन से बेहतर है। – RichardOD

+0

यदि आप 2.0+ पर हैं, तो निश्चित रूप से ... –

+1

हालांकि यह सिर्फ एक और स्तर को नीचे खींचने/पकड़ने के लिए दफन कर रहा है, जहां आपको इसे देखना नहीं है। –

0
static bool IsValidUri(string urlString) { 
    try { 
     new Uri(urlString); 
     return true; 
    } catch { 
     return false; 
    } 
} 
+0

divo के उत्तर –

0

कोशिश/पकड़ कार्यक्षमता का उपयोग करने का एक तेज़ तरीका (संभवतः) रेगेक्स का उपयोग करना होगा। यदि आपको अपवाद को पकड़ने वाले URL के 1000s को सत्यापित करना होता है तो कई बार धीमा हो जाएगा।

यहां a link to sample Regex - अधिक जानने के लिए Google का उपयोग करें।

+0

पर प्रदर्शन के संबंध में टिप्पणी देखें, मुझे किसी भी तरह संदेह है। regexes, यहां तक ​​कि संकलित भी विशेष रूप से तेज़ नहीं हैं। भले ही आप कभी भी एक लिख सकें जो सटीक था। – Kris

+0

यह तेज़ होगा, लेकिन सही होने के लिए बहुत कठिन है। –

+1

क्रिस- शायद आपको समझ में नहीं आता कि कितने महंगा फेंक अपवाद हो सकते हैं- यदि वे बड़े लूप में किए जाते हैं तो वे बहुत धीमे होते हैं। – RichardOD

13

आप Uri.IsWellFormedUriString, उस के लिए अपने स्वयं के समारोह बनाने की आवश्यकता का उपयोग कर सकते हैं:

public static bool IsWellFormedUriString(string uriString, uriKind uriKind); 

uriKind कहाँ हो सकता है:

UriKind.RelativeOrAbsolute 
UriKind.Absolute 
UriKind.Relative 

अधिक जानकारी के लिए देखें: http://msdn.microsoft.com/en-us/library/system.uri.iswellformeduristring.aspx

+0

यह कई स्थितियों में काम नहीं करता है – Farshid

30

इस प्रकार प्रदान किए गए उत्तरों एक योजना की जांच नहीं करते हैं, जो सभी प्रकार के अवांछित इनपुट की इजाजत देता है, जो आपको जावास्क्रिप्ट इंजेक्शन के लिए कमजोर बना सकता है (TheCloudle की टिप्पणी देखें ssSky)।

एक यूआरआई एक वस्तु की एक अनूठी पहचान है। "सी: \ टेस्ट" एक वैध यूआरआई है।

/// <summary> 
/// Validate a URL. 
/// </summary> 
/// <param name="url"></param> 
/// <returns></returns> 
private bool ValidUrl(string url) 
{ 
    Uri validatedUri; 

    if (Uri.TryCreate(url, UriKind.Absolute, out validatedUri)) //.NET URI validation. 
    { 
     //If true: validatedUri contains a valid Uri. Check for the scheme in addition. 
     return (validatedUri.Scheme == Uri.UriSchemeHttp || validatedUri.Scheme == Uri.UriSchemeHttps); 
    } 
    return false; 
} 

को परिभाषित करें जो योजनाएं आप की अनुमति देगा और कोड तदनुसार परिवर्तन:

अपने प्रोजेक्ट में मैं निम्नलिखित कोड का इस्तेमाल किया।

+1

+1, यह सबसे अच्छा जवाब है और यह अद्वितीय भी है कि वास्तव में "यूआरएल को कैसे सत्यापित करें", एक ** यूआरएल **! – ElektroStudios

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