2009-06-20 12 views
20

आज सुबह मैंने निम्नलिखित स्निपेट कोड को गलती से देखा, मैं काफी आश्चर्यचकित था क्योंकि यह बहुत अच्छा काम करता है।Foreach loop में HttpCookie ऑब्जेक्ट की बजाय Request.Cookies स्ट्रिंग स्ट्रिंग क्यों करता है?

कृपया इसके तर्क को न देखें, मैं सिर्फ उत्सुक हूं कि HttpCookieCollection (इस मामले में Request.Cookies) फ़ोरैच लूप में HttpCookie ऑब्जेक्ट के बजाय स्ट्रिंग (कुकी नाम) क्यों लौटाता है। क्या यह एक स्थिरता मुद्दा है क्योंकि हम आमतौर पर इस संग्रह में इंडेक्स/नाम से HttpCookie ऑब्जेक्ट प्राप्त करते हैं?

धन्यवाद,

foreach (string cookieKey in System.Web.HttpContext.Current.Request.Cookies) 
{ 
    HttpCookie tmpCookie = System.Web.HttpContext.Current.Request.Cookies[cookieKey]; 
    if (tmpCookie != null && tmpCookie["RecentlyVisited"] != null) 
    { 
     cookie.Add(tmpCookie); 
    } 
} 
+0

धन्यवाद, @Chris: मैं नहीं पूछते पाश के लिए द्वारा एक संग्रह पुनरावृति करने के लिए कैसे;) –

+0

मैं एक ही मुद्दा है, मुझे समझ नहीं आता मुझे foreach घोषणा में HttpCookie की स्ट्रिंग insted का उपयोग क्यों करना है। कोई सुराग? – gonxalo

+1

यदि System.Net.CookieCollection का उपयोग कर रहे हैं तो आप इस तरह से पुन: सक्रिय कर सकते हैं। लेकिन HttpCookieCollection के साथ नहीं, अजीब व्यवहार मुझे लगता है। सार्वजनिक स्थैतिक HttpCookieCollection कुकी CollectionToHttpCookieCollection (कुकी कोलेक्शन कुकी कोलेक्शन) { HttpCookieCollection httpCookieCollection = new HttpCookieCollection(); फोरैच (कुकी कुकी में कुकी कुकी) { httpCookieCollection.Add (कुकीटोहट्पकुकी (कुकी)); } वापस httpCookieCollection; } – gonxalo

उत्तर

6

इसे और अधिक समझ में आता है कुंजी द्वारा एक संग्रह के माध्यम से पुनरावृति करने के लिए। इस तरह आप दोनों कुंजी के लिए उपयोग किया है और आसानी से System.Web.HttpContext.Current.Request.Cookies[cookieKey];

+9

यदि आपके पास एक ही नाम के साथ दो कुकीज़ नहीं हैं, तो इस मामले में यह दृष्टिकोण त्रुटिपूर्ण है। –

8

फोन करके मूल्य तक पहुँच सकते हैं आप सूचकांक द्वारा अपने कुकीज़ लूप करने के लिए चाहते हो सकता है:

HttpCookieCollection MyCookieColl; 
HttpCookie MyCookie; 

MyCookieColl = Request.Cookies; 

// Capture all cookie names into a string array. 
String[] arr1 = MyCookieColl.AllKeys; 

// Grab individual cookie objects by cookie name. 
for (int i = 0; i < arr1.Length; i++) 
{ 
    MyCookie = MyCookieColl[arr1[i]]; 
    Debug.WriteLine("Cookie: " + MyCookie.Name); 
    Debug.WriteLine("Expires: " + MyCookie.Expires); 
    Debug.WriteLine("Secure:" + MyCookie.Secure); 
} 
4

आप के रूप में उनके संख्यात्मक सूचकांक द्वारा कुकीज़ प्राप्त कर सकते हैं के बाद से अच्छी तरह से एक कुकी के चयन या उस तरह की कुछ प्रतिलिपि किए बिना एक ही नाम के साथ कई कुकीज़ स्कैन करना वास्तव में संभव है।

इस चाल करना चाहिए:

var cookieName = "yourcookie"; 
var matches = cookies.AllKeys 
    .Select((name, i) => new {name, i}) 
    .Where(x => x.name == cookieName) 
    .Select(x => DoSomethingWithEachMatch(cookies[x.i])); 
संबंधित मुद्दे