अमान्य URI: URI का प्रारूप निर्धारित नहीं किया जा सका


115

मुझे यह त्रुटि मिलती रहती है।

अमान्य URI: URI का प्रारूप निर्धारित नहीं किया जा सका।

मेरे पास कोड है:

Uri uri = new Uri(slct.Text);
if (DeleteFileOnServer(uri))
{
    nn.BalloonTipText = slct.Text + " has been deleted.";
    nn.ShowBalloonTip(30);
}

अद्यतन: सामग्री slct.Text में है ftp.jt-software.net/style.css

क्या देता है? यह कैसे मान्य URI प्रारूप नहीं है? यह सादा पाठ है।


यह मुझे slct.Text की सामग्री को बता रहा है जो एक वैध उड़ी नहीं है। लकिन यह है।

1
@ जेट्स: आप शायद अपमानजनक यूआरआई पोस्ट कर सकते हैं?
मिच गेहूं

क्या आप उरी को नए उरी के साथ बनाते समय या सर्वर पर फ़ाइल को हटाने की कोशिश करते समय एक अपवाद प्राप्त करते हैं?
शमौन

2
अपमानजनक उरी है: ftp.jt-software.net/style.css

2
@jts, मुझे लगता है कि वे डाउनवोट उन लोगों से आ रहे थे जिन्होंने एक टिप्पणी छोड़ दी और पता चला कि आपने अपना उत्तर अपडेट नहीं किया है। ध्यान दें, एसओ को साफ रखने के लिए, आप इसे पूरा करने के लिए अपने प्रश्न को संपादित कर सकते हैं (और उत्तर स्वीकार कर सकते हैं)। आप गायब थे ftp://या http://आपके URI में थे । आप मेरा वोट अभी प्राप्त करें ;-)
हाबिल

जवाबों:


126

यह उरी के लिए एक अलग कंस्ट्रक्टर का उपयोग करने में मदद कर सकता है।

यदि आपके पास सर्वर नाम है

string server = "http://www.myserver.com";

और इसके लिए संलग्न करने के लिए एक रिश्तेदार उरी मार्ग है, जैसे

string relativePath = "sites/files/images/picture.png"

इन दोनों से उरी बनाते समय मुझे "प्रारूप निर्धारित नहीं किया जा सकता है" अपवाद तब तक मिलता है जब तक कि मैं उरकिंड के साथ कंस्ट्रक्टर का उपयोग नहीं करता, अर्थात

// this works, because the protocol is included in the string
Uri serverUri = new Uri(server);

// needs UriKind arg, or UriFormatException is thrown
Uri relativeUri = new Uri(relativePath, UriKind.Relative); 

// Uri(Uri, Uri) is the preferred constructor in this case
Uri fullUri = new Uri(serverUri, relativeUri);

59

यहां संभावित कारणों की जांच करें: http://msdn.microsoft.com/en-us/library/z6c2z492(v=VS.100).aspx

संपादित करें:

आपको पते के सामने प्रोटोकॉल उपसर्ग लगाने की आवश्यकता है, अर्थात आपके मामले में "ftp: //"


3
कुछ भी गलत नहीं है। मैं वास्तव में जल्दी से सब कुछ कर रहा था, और मैंने गलती से डाउन बटन पर क्लिक किया, और यह कहा कि जब तक प्रश्न संपादित नहीं किया जाता है, तब तक मैं इसे पूर्ववत नहीं कर सकता, इसलिए यदि आप कृपया अपने प्रश्न या कुछ को संपादित कर सकते हैं, तो मैं आपको पुनः बना सकता हूं :) तो क्षमा करें उस के बारे में :-( मेरा मतलब यह नहीं था कि आप

जाटों के बजाय वापस मतदान। चूंकि बाद में गायब हो गया :)
एंडी

1
@Simon, मैंने अभी आपको फिर से वोट दिया, बहुत देरी के बारे में खेद है! तुम मुझे 2times पंच कर सकते हैं

13

ऐसा लगता है कि यह एक वास्तविक उरी हो सकता है। क्रॉस-ब्राउज़र सिल्वरलाइट करते समय मैं इस समस्या में भाग गया; मेरे ब्लॉग पर मैंने एक वर्कअराउंड का उल्लेख किया है: पहले पैरामीटर के रूप में एक "संदर्भ" यूरी पास करें।

यदि uri वास्तविक है, तो पूर्ण uri बनाने के लिए संदर्भ uri का उपयोग किया जाता है। यदि यूरी निरपेक्ष है, तो संदर्भ यूरी को नजरअंदाज कर दिया जाता है।

संपादित करें: आपको uri में "योजना" की आवश्यकता है, उदाहरण के लिए, "ftp: //" या "http: //"


12

बेहतर उपयोग Uri.IsWellFormedUriString(string uriString, UriKind uriKind)http://msdn.microsoft.com/en-us/library/system.uri.iswellformeduristring.aspx

उदाहरण :-

 if(Uri.IsWellFormedUriString(slct.Text,UriKind.Absolute))
 {
        Uri uri = new Uri(slct.Text);
        if (DeleteFileOnServer(uri))
        {
          nn.BalloonTipText = slct.Text + " has been deleted.";
          nn.ShowBalloonTip(30);
        }
 }

4
यह एक समाधान प्रदान नहीं करता है। यह सिर्फ जाँच करता है कि क्या यूआरआई सही है और यदि ऐसा है, तो यह जारी है।
अलेक्जेंड्रू डिकू

8

मैंने इसके बजाय UriBuilder का उपयोग करके इसके चारों ओर काम किया ।

UriBuilder builder = new UriBuilder(slct.Text);

if (DeleteFileOnServer(builder.Uri))
{
   ...
}

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.