2010-02-01 10 views
5

मैं अपने क्वेरी स्ट्रिंग में सभी कुंजी/मान जोड़े संग्रहीत करना चाहते हैं: एक शब्दकोश मेंसबसे अच्छा तरीका है सब querystring जोड़े लेने के लिए और एक शब्दकोश init

www.example.com/?a=2&b=3&c=34 

। क्या सभी वस्तुओं के माध्यम से मैन्युअल रूप से चक्र चलाने के लिए यह w/o करने का एक त्वरित तरीका है?

उत्तर

13

HttpUtility.ParseQueryString() आज़माएं।

यह आपको अपनी चाबियों और मूल्यों के NameValueCollection वापस देता है।

+0

अच्छा, मुझे HttpUtility के बारे में पता नहीं था। (लेकिन मुझे लगता है कि ऐसा इसलिए है क्योंकि यह System.Web में है, एक नामस्थान जिसे मैं इतना परिचित नहीं हूं)। –

+0

इसके अलावा आप "असली" IDictionary प्राप्त करने के लिए NameValueCollectionExtensions.CopyTo (यह नाम ValueCollection, IDictionary << string, object >>) का उपयोग कर सकते हैं। – JohannesH

+2

ब्ला ... टिप्पणियों में एक "बड़ा से अधिक" साइन काम नहीं करता है। एसओ पर टिप्पणियों में कुछ सुधार की जरूरत है। – JohannesH

0

प्रश्न चिह्न के बाद मिली स्ट्रिंग प्राप्त करें, '&' वर्ण पर स्ट्रिंग को विभाजित करें। फिर, प्रत्येक स्ट्रिंग को वापस करने के लिए, '=' वर्ण पर दोबारा विभाजित करें।

आप इसके लिए एक विस्तार विधि भी बना सकते हैं।

public static class StringExtensions 
{ 

    public Dictionary<string, string> ExtractQueryStringValues(this string target) 
    { 

     string queryString = target.Split (target.IndexOf ('?') + 1); 

     string[] keyvaluePairs = queryString.Split ('&'); 

     Dictionary<string, string> result = new Dictionary<string, string>(); 

     foreach(string pair in keyvaluePairs) 
     { 
      var tmp = pair.Split ('='); 

      result.Add (tmp[0], tmp[1]); 
     } 

     return result; 

    } 

} 

ऐसा कुछ। याद रखें, यह सुरक्षित नहीं है, क्योंकि यह प्रत्येक एज-केस को संभाल नहीं करता है। (उदाहरण के लिए, एक स्ट्रिंग दी गई जिसमें पहले प्रश्न चिह्न आदि के बाद कुछ भी नहीं है ...), लेकिन यह आपको शुरू करना चाहिए।

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