2009-03-24 12 views
12

मैं कर रहा हूँ रेट्रो-फिटिंग एक PHP HTTP प्रॉक्सी (कैशिंग के लिए) का उपयोग करने के लिए एक आवेदन वास्तविक API सर्वर के बजाय, एप्लिकेशन को वर्तमान में सर्वर यूआरआई और कोड के साथ पथ को जोड़ती है:का मेल यूआरआई और पथ

methodUri = new Uri(apiUri, method.Path) 

कहाँ:

  • apiUri = "http://api.eve-online.com/" (System.Uri वस्तु)
  • method.Path = "/ चार/Sk illIntraining.xml.aspx "(स्ट्रिंग)

उपरोक्त कथन का परिणाम

"http://api.eve-online.com/char/SkillIntraining.xml.aspx" (System.Uri Object) 

पीएचपी HTTP प्रॉक्सी का उपयोग करने के अनुरोध को बदलने की के रूप में

  • इस प्रकार होता है apiUri = "http://www.r-s.co.uk/eproxy.php" (सिस्टम.यूरी ऑब्जेक्ट)
  • विधि। पैथ = "/char/SkillIntraining.xml.aspx" (स्ट्रिंग)

उत्पादन मैं उम्मीद कर रहा था था:

"http://www.r-s.co.uk/eproxy.php/char/SkillIntraining.xml.aspx" (System.Uri Object) 

हालांकि उत्पादन मैं मिलता है:

"http://www.r-s.co.uk/char/SkillIntraining.xml.aspx" (System.Uri Object) 

मैं समझें कि यह कन्स्ट्रक्टर उरी (उरी, स्ट्रिंग) की सही कार्यक्षमता है, मेरा सवाल यह है कि आउटपुट प्राप्त करने के लिए मेरे स्थान पर उपयोग करने के लिए बेहतर कार्य या कन्स्ट्रक्टर क्या होगा? मैंने विधि में अग्रणी "/" को हटाने का प्रयास किया है। इसे एक पूर्ण पथ से एक सापेक्ष पथ पर ले जाना, हालांकि इससे मदद नहीं मिली।

नोट: नीचे दोनों समाधान काम करते हैं, फिर भी System.UriBuilder System.Uri का उपयोग करने से संसाधनों के लिए कम बदलाव किये गये यूआरआई के और रास्तों के संयोजन के लिए और मेरे मामले में एक और अधिक मजबूत तंत्र प्रदान करता है। अगर मैं पसंद करता तो मैं दोनों उत्तरों को सही के रूप में चिह्नित करता।

उत्तर

23

उरी वस्तु का उपयोग न करें, का उपयोग एक UriBuilder - यह बेहतर तरीका के साथ copes लापता स्लैश

अपेक्षा के अनुरूप तो

Uri apiUri = new Uri("http://www.r-s.co.uk/eproxy.php"); 
string methodPath = "/char/SkillIntraining.xml.aspx"; 

System.UriBuilder uriBuilder = new System.UriBuilder(apiUri); 
uriBuilder.Path += methodPath; 

Console.WriteLine(uriBuilder.Uri.ToString()); 

काम करता है और पैदा करता http://www.r-s.co.uk/eproxy.php/char/SkillIntraining.xml.aspx

+0

आप सही सिस्टम हैं। यूरीबिल्डर यूआरआई बनाने का एक और अधिक मजबूत तरीका है, धन्यवाद। –

+2

ध्यान दें कि पथ यूआरएल एन्कोड किया जाएगा, इसलिए यदि इसमें अतिरिक्त क्वेरी स्ट्रिंग है? और वर्ण एन्कोड किए जाएंगे। यह है वर्णित इस विधि में एक कमजोरी। –

+0

'उरीबिल्डर' की क्वेरी स्ट्रिंग्स के लिए एक अलग क्वेरी संपत्ति है, जिसे अनुशंसा की जाती है क्योंकि यह उस केस केस के लिए सही ढंग से वर्ण एन्कोडिंग को संभालती है। –

7

लगने वाला "/" apiUri में जोड़े, और हटाने अग्रणी "/" method.Path से:

 Uri apiUri = new Uri("http://www.r-s.co.uk/eproxy.php/"); 
     string path = "char/SkillIntraining.xml.aspx"; 
     Uri uri = new Uri(apiUri, path); 
     Console.WriteLine(uri.ToString()); 
+2

क्या कोई उपकरण नहीं है, जो एक तरफ या दूसरे से "/" जोड़ने और घटाने के इस मुद्दे को हल करेगा? – Marty

+0

यदि आप जो बिट जोड़ रहे हैं उस पर अग्रणी स्लैश डालते हैं, तो उरी कन्स्ट्रक्टर सोचता है कि यह आधार के सापेक्ष है, इसलिए आपको "http://www.base.com/bit-you-are-adding.html" मिलता है। , यदि आप अग्रणी स्लैश छोड़ देते हैं तो यह मानता है कि यह मूल उरी के सापेक्ष है, जो आपको "http://www.base.com/OriginalUri/bit-you-are-adding" देता है।एचटीएमएल " – galamdring

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