2009-12-09 17 views
5
Dim x AS New URI("http://www.example.com/test//test.asp") 
Dim rel AS New URI("http://www.example.com/xxx/xxx.asp") 
Console.Writeline(x.MakeRelativeUri(rel).Tostring()) 

के साथ काम यहाँ बनाने के लिए उत्पादन होता है:सामान्य यूआरआई इसे सही ढंग से MakeRelativeUri

../../xxx/xxx.asp 

कौन सा सही लगती है लगभग सभी वेब सर्वर निम्नलिखित रूप में एक ही अनुरोध के बाद दो पर कार्रवाई करेंगे:

http://www.example.com/test//test.asp 
http://www.example.com/test/test.asp 

इस व्यवहार को ठीक करने का सबसे अच्छा तरीका क्या है यह करने के लिए कोई एपीआई है, या मैन्युअल रूप से एक नया यूआरआई बनायेगा और पथ में सभी // को हटा देगा?

उत्तर

4

ऐसा लगता है कि लोकलपाथ हिस्से में एक स्लैश के साथ सभी बहु-स्लैश को प्रतिस्थापित करना सबसे अच्छा समाधान है। आईआईएस एएसपीनेट को यूआरएल पास करते समय भी ऐसा करता है।

निम्नलिखित कोड चाल करेगा।

x = new Uri(string.Format("{0}://{1}:{2}{3}{4}", x.Scheme, x.Host, x.Port, Regex.Replace(x.LocalPath, @"(?<!\:)/{2,}", "/"), x.Query)); 
0

सबसे पहले, आपका कोड सी # नहीं है लेकिन वीबी है, इसलिए टैग गलत हैं।

क्या आप इसके बजाय इस कोड का उपयोग कर सकते हैं, जो "सही" यूआरएल देता है क्योंकि // बेसूरी में हैं और इसे छोड़ दिया जाएगा?

var x2 = new Uri(x, rel); 

या यूआरएल में ../ बैकट्रैकिंग प्राप्त करना महत्वपूर्ण है?

MakeRelativeUri फ़ंक्शन आरएफसी के अनुसार सही करता है, लेकिन यह सामान्य सम्मेलन के अनुसार विफल रहता है। मैं सुझाव दूंगा कि आप स्वयं को यूआरएल सामान्य करें, या यदि संभव हो तो ऊपर दिए गए मेरे उदाहरण का उपयोग करें।

x = new Uri(Regex.Replace(x.OriginalString, "[^:]//", "/")); 
+0

कि कोड, बहुत कच्चे हैक है, क्योंकि यह कई परिदृश्य में काम नहीं करेगा, सबसे स्पष्ट रूप से http://example.com/test///xxx यह बहुत अच्छी तरह से इस इनकोडिंग नहीं कर रहा है दूसरी बात भले ही एक अब भी है वैध यूआरआई: http://example.com/?bla=//Whatup –

+0

डॉ। एविल: एक वैध यूआरएल बड़े पैमाने पर वेबसर्वर पर व्याख्या करता है, और यूआरएल को पार्स करते समय यह कितना मजबूत होता है। चूंकि ढांचा आपके द्वारा की जाने वाली सभी सफाई नहीं करता है, फिर एक "मेकेलेटिवुरल" फ़ंक्शन स्वयं बनाएं जो उचित रूप से स्लेश की जांच और सफाई करता है। क्या आपको आरएफसी का पालन करना चाहिए, या ऐसे मामलों को संभालना चाहिए जहां यूआरएल स्पष्ट रूप से गलत है? ।) –

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