C# में URL को सही तरीके से जोड़ना: वेब के लिए Path.Combine ट्यूटोरियल

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Path.Combine URL को क्यों तोड़ता है और इसे कैसे ठीक करें?

\n\n

कल्पना करें: आप C# में एक एप्लिकेशन लिख रहे हैं जो API को कॉल करता है। आपको https://api.example.com/v1/users/123 जैसा URL बनाना है। सबसे पहले जो विचार आता है वह है परिचित Path.Combine का उपयोग करना। और यह गलती है जो हजारों डेवलपर्स करते हैं। Stack Overflow पर «Path.Combine for URLs?» प्रश्न ने सैकड़ों हजारों व्यूज प्राप्त किए हैं - और यह व्यर्थ नहीं है।

\n\n

इस लेख में, हम विश्लेषण करेंगे कि Path.Combine URL के लिए घातक क्यों है, और C# में पतों को जोड़ने के 4 सही तरीके दिखाएंगे। आप जानेंगे कि UriBuilder कैसे काम करता है, Flurl लाइब्रेरी पर ध्यान क्यों देना चाहिए, और अपनी स्वयं की सुरक्षित URL जोड़ने की विधि कैसे लिखें। चलिए शुरू करते हैं!

\n\n

समस्या: Path.Combine में क्या गलत है?

\n\n

Path.Combine मेथड विंडोज फ़ाइल सिस्टम के लिए बनाया गया है। यह बैकस्लैश (\\) का उपयोग करता है और ड्राइव की विशेषताओं (जैसे, C:\\) को ध्यान में रखता है। URL फॉरवर्ड स्लैश (/) के साथ काम करता है और इसमें «ड्राइव» की कोई अवधारणा नहीं है। आइए एक उदाहरण देखें:

\n\n
string baseUrl = "https://api.example.com/api";\nstring endpoint = "/users/123";\nstring result = Path.Combine(baseUrl, endpoint);\nConsole.WriteLine(result);\n// आउटपुट: https:\\\\api.example.com\\api\\users\\123 (विंडोज पर)\n// या और भी बुरा: https://api.example.com/api/users/123 (यदि किस्मत अच्छी हो)
\n\n

परिणाम, हल्के शब्दों में कहें तो, अमान्य है। Path.Combine स्लैश को बैकस्लैश में बदल देता है (विंडोज में), और आपका HTTP अनुरोध त्रुटि के साथ विफल हो जाएगा। भले ही Linux पर सब कुछ सामान्य दिखे, कोड पोर्टेबल नहीं रह जाता। और यदि बेस URL के अंत में पहले से स्लैश है? या endpoint में डबल स्लैश है? तो मुश्किल शुरू हो जाती है।

\n\n

Stack Overflow से एक वास्तविक उदाहरण

\n

«Path.Combine for URLs?» प्रश्न के सबसे लोकप्रिय उत्तरों में से एक (लेखक — Brian, 600+ अपवोट) इस वाक्य से शुरू होता है: «कृपया ऐसा न करें। Path.Combine फ़ाइलों के लिए है, URL के लिए नहीं।» और यह एक सुनहरा नियम है। आइए जानें कि C# URL के साथ सुरक्षित रूप से काम करने के लिए कौन से टूल प्रदान करता है।

\n\n

तरीका 1: Uri.TryCreate — .NET का अंतर्निहित मेथड

\n\n

पहला और सबसे स्पष्ट तरीका Uri क्लास का उपयोग करना है। यह बेस URL और रिलेटिव पथ को सही ढंग से जोड़ सकता है:

\n\n
string baseUrl = "https://api.example.com/api";\nstring relativePath = "/users/123";\n\nif (Uri.TryCreate(baseUrl, relativePath, out Uri result))\n{\n    Console.WriteLine(result.ToString());\n    // आउटपुट: https://api.example.com/users/123\n}\nelse\n{\n    Console.WriteLine("अमान्य URL");\n}
\n\n

महत्वपूर्ण: TryCreate का दूसरा आर्गुमेंट एक रिलेटिव URI होना चाहिए (/ से शुरू होना चाहिए)। यदि आप केवल "users/123" पास करते हैं, तो इसे एब्सोल्यूट माना जाएगा — और परिणाम गलत होगा। यह सबसे लचीला तरीका नहीं है, लेकिन सरल मामलों के लिए यह एक बेहतरीन अंतर्निहित समाधान है।

\n\n

तरीका 2: UriBuilder — शक्तिशाली और लचीला

\n\n

UriBuilder क्लास URL के प्रत्येक भाग: स्कीम, होस्ट, पोर्ट, पथ और query-पैरामीटर पर पूर्ण नियंत्रण देता है। जब आपको एक जटिल पता बनाना हो तो यह आदर्श विकल्प है:

\n\n
var builder = new UriBuilder("https://api.example.com");\nbuilder.Port = 8080;\nbuilder.Path = "/api/v1/users";\nbuilder.Query = "page=1&limit=10";\n\nUri uri = builder.Uri;\nConsole.WriteLine(uri.ToString());\n// आउटपुट: https://api.example.com:8080/api/v1/users?page=1&limit=10
\n\n

यह क्यों बढ़िया है?

\n
    \n
  • स्वचालित एस्केपिंग — query-पैरामीटर में विशेष वर्ण एन्कोड हो जाएंगे।
  • \n
  • सही स्लैश — UriBuilder स्वयं अतिरिक्त स्लैश जोड़ता या हटाता है।
  • \n
  • पोर्ट और स्कीम — http को https में बदलना या पोर्ट जोड़ना आसान है।
  • \n
\n\n

लेकिन एक बारीकी है: Path

ब्लॉग

पुस्तक अनुशंसाएँ