2009-11-25 12 views
5

विलय करते समय पथ भाग ओवरराइट हो जाता है मुझे दो यूआरएल को गठबंधन करने की आवश्यकता होती है जिनमें दोनों की जानकारी होती है।दो यूआरआई

मुझे Uri का उपयोग करने की संभावना देने के लिए मैं उपयोग करना चाहूंगा। ट्रीक्रेट(), इसलिए मैं विकृत यूआरएल को पकड़ सकता हूं।

समस्या यह है कि मैं का सामना करना पड़ रहा है कि आधार URI पथ पर ध्यान नहीं दिया जा करने के लिए जब मैं निरपेक्ष और सापेक्ष यूआरआई विलय लगता है:

Uri absoluteUri= new Uri("http://hostname/path/", UriKind.Absolute); 
Uri relativeUri = new Uri("/my subsite/my page.aspx?my=query", UriKind.Relative); 
Uri resultUri; 
if (!Uri.TryCreate(absoluteUri, relativeUri, out resultUri)) 
     // handle errors 

ऊपर की आउटपुट है:

http://hostname/my%20subsite/my%20page.aspx?my=query 

मैं इसे होना चाहते हैं:

http://hostname/path/my%20subsite/my%20page.aspx?my=query 

वहाँ URL हैं, जो बो गठबंधन करने के लिए एक रास्ता है Uri कक्षा का उपयोग कर पथ जानकारी शामिल है?

उत्तर

12

आपका सापेक्ष URI, रिश्तेदार होना चाहिए यानी, पहले स्लैश हटाने (या अवधि जोड़ें),

string relative = "/my subsite/my page.aspx?my=query"; 

Uri test1= new Uri(relative.Substring(1), UriKind.Relative); // without 'root' 
Uri test2= new Uri("." + relative, UriKind.Relative);  // with 'current' 

कार्य उदाहरण:

Uri baseUri = new Uri("http://hostname/path/"); 
string relative = "/my subsite/my page.aspx?my=query"; 

Uri test1 = new Uri(baseUri, relative);    // original string 
Uri test2 = new Uri(baseUri, relative.Substring(1)); // without 'root' character 
Uri test3 = new Uri(baseUri, "." + relative);  // with 'current' character 

Console.WriteLine(test1.OriginalString); // wrong 
Console.WriteLine(test2.OriginalString); // right! 
Console.WriteLine(test3.OriginalString); // right! 

तो, आप शायद अपने रिश्तेदार भाग के साथ सौदा करना चाहिए इस तरह:

if (relative.StartsWith("/")) 
    relative = "." + relative; 
+0

क्या आपने इसे आजमाया? जब मैं करता हूं तो कोई फर्क नहीं पड़ता। –

+0

@anders, हाँ, मेरे लिए काम करता है; मैं एक पूर्ण उदाहरण के साथ अपना जवाब संपादित करता हूं; कृपया, एक नज़र डालें –

+3

आह मैंने पाया कि आपका कोड क्या काम करता है और मेरा नहीं: ऐसा लगता है कि पूर्ण यूआरएल भी इसे काम करने के साथ समाप्त होना चाहिए! मैंने स्ट्रिंग absoluteUrl = "http: // होस्टनाम/पथ" का उपयोग किया; और यह काम नहीं किया, लेकिन "पथ" के बाद दोनों अंत slahs के साथ और "मेरे" से पहले कोई स्लैश शुरू नहीं लगता है यह काम करता है! ऐसा लगता है कि इतनी बीमार परीक्षण इतनी अधिक है, लेकिन आप इसके लिए एक उत्तर के लायक हैं :-) –

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