2009-11-18 14 views
12

मैं अक्सर सिस्टम के लिए/अपने आस-पास के अपने स्वयं के रैपर/विस्तार विधियों को घुमाता हूं। और यह सोच रहा था कि अगर कोई अच्छा ओपन सोर्स कार्यान्वयन जानता है। मुझे सबसे ज्यादा करना पसंद है पर्स क्वेरीस्ट्रिंग पैरामीटर, एक नई क्वेरी स्ट्रिंग (यह कुंजी है) बनाएं, और पेज नामों को प्रतिस्थापित करें। किसी भी अच्छे को मिला, या सिस्टम है। आपके लिए पर्याप्त अच्छा है?सी # यूआरएल बिल्डर क्लास

उत्तर

15

ब्रैडविन की QueryString Builder कक्षा अच्छी है। एन्क्रिप्शन के लिए फ्लुएंट इंटरफ़ेस और समर्थन।

यह कोडप्रोजेक्ट पर UrlBuilder कक्षा को देखने के लायक भी है। सिस्टम के समान। UriBuilder को QueryString के साथ काम करने के लिए बेहतर समर्थन है।

+0

कुडोस। यह लगभग वर्बैटिम है जो मैं वर्षों से रोलिंग कर रहा हूं। UriBuilder को पसंद न करें क्योंकि मैं गतिशील रूप से qs पैरामीटर जोड़ना अधिक कार्यक्षमता चाहता हूं। – Trent

6

हम अपने स्वयं के वैकल्पिक उरी वर्ग का उपयोग करते हैं जो आंशिक रूप से उरी पर आधारित है, जैसा कि आप कहते हैं। हालांकि, मुझे लगता है कि बनाने के लिए एक महत्वपूर्ण भेद है - सिस्टम। यूरी आमतौर पर अपरिवर्तनीय होने का इरादा है - या, अधिक सटीक रूप से, अपरिवर्तनीय व्यवहार करें। एक बार अस्तित्व में आने के बाद, यह एक सटीक सार्वभौमिक स्थान/संसाधन समापन बिंदु का प्रतिनिधित्व करता है। यदि आपको किसी भिन्न स्थान का वर्णन करने की आवश्यकता है, तो आपको एक नया उरी बनाना चाहिए, मौजूदा को नहीं बदला जाना चाहिए।

एक अलग वर्ग है जो उरी के उत्पादन में माहिर है: UriBuilder

0

मुझे यकीन नहीं है कि आप क्या करने की कोशिश कर रहे हैं (उदाहरण मदद करेंगे) लेकिन ऐसा लगता है कि आप एएसपी.नेट में अपाचे के mod_rewrite की कुछ कार्यक्षमता प्राप्त करने का प्रयास कर रहे हैं।

इस बारे में an article at MSDN है।

3

System.Uri और System.UriBuilder के बीच, आप उन दोनों से वास्तव में क्या खो रहे हैं?

+0

उरी तरह रेक्स एम स्पष्ट किया अपरिवर्तनीय है। लेकिन मुझे उरीबिल्डर के बारे में भी पता नहीं था। इसमें देखेंगे। इस उत्तर पर – Trent

1

कोडप्लेक्स पर एक बहुत अच्छी नई ओपन सोर्स प्रोजेक्ट है जो आपको यूरिस को पढ़ने, लिखने, एन्क्रिप्ट करने और कुछ और करने की अनुमति देता है। उनकी जाँच करो!

http://querystrings.codeplex.com

2
/// <summary> 
    /// The arguments must be like: varName1, varValue1, varName2, varValue2 and so on. 
    /// Empty names will be not be added to the result. 
    /// Returns a string of the form varName1=varValue1&varName2=varValue2... 
    /// </summary>  
    public static string BuildQueryString(params string[] strings) 
    { 
     Debug.Assert(0 == strings.GetLength(0) % 2); 

     StringBuilder builder = new StringBuilder(50); 
     bool isName = true; 
     bool isEmptyName = false; 

     foreach (string crtString in strings) 
     { 
      isEmptyName = (isName && string.IsNullOrEmpty(crtString)) || 
       (!isName && isEmptyName); 

      if (!isEmptyName) 
      { 
       builder.Append(HttpUtility.UrlEncode(crtString)); 

       if (isName) 
        builder.Append("="); 
       else 
        builder.Append("&"); 
      } 

      isName = !isName; 
     } 

     return builder.ToString(); 
    } 
12

Flurl [प्रकटीकरण: मैं लेखक हूँ]:

var url = "http://www.some-api.com" 
    .AppendPathSegment("endpoint") 
    .SetQueryParams(new { 
     api_key = ConfigurationManager.AppSettings["SomeApiKey"], 
     max_results = 20, 
     q = "Don't worry, I'll get encoded!" 
    }); 

आप के प्रयोजन के लिए यूआरएल का निर्माण कर रहे हैं तो एक धाराप्रवाह URL निर्माता है कि इस तरह दिखता है है उन्हें बुलाकर, Flurl.Http एक साथी lib है जो आपको धाराप्रवाह श्रृंखला से HTTP करने देता है:

await "https://api.mysite.com" 
    .AppendPathSegment("person") 
    .SetQueryParams(new { ap_key = "my-key" }) 
    .WithOAuthBearerToken("MyToken") 
    .PostJsonAsync(new { first_name = firstName, last_name = lastName }); 

NuGet पर पूरा पैकेज प्राप्त करें:

PM> Install-Package Flurl.Http

या बस स्टैंड-अलोन URL निर्माता:

PM> Install-Package Flurl

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