لماذا Request.Cookies عودة سلسلة بدلا من وجوه HttpCookie في حلقة foreach؟

StackOverflow https://stackoverflow.com/questions/1021183

  •  06-07-2019
  •  | 
  •  

سؤال

وهذا الصباح رأيت بالصدفة رمز المقتطف التالي، فوجئت إلى حد ما لأنها تعمل بشكل جيد جدا.

ولا ننظر الى منطقها من فضلك، أنا الغريب فقط لماذا لHttpCookieCollection (Request.Cookies في هذه الحالة) بإرجاع سلسلة (اسم الكعكة) بدلا من كائن HttpCookie في حلقة foreach. هل هي مسألة اتساق لأننا عادة الحصول على كائن 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);
    }
}
هل كانت مفيدة؟

المحلول

ووأكثر منطقية لتكرار خلال مجموعة من المفاتيح. وبهذه الطريقة يمكنك الحصول على كل من مفاتيح ويمكن بسهولة الوصول إلى القيمة من خلال الدعوة System.Web.HttpContext.Current.Request.Cookies[cookieKey];

نصائح أخرى

وقد تحتاج إلى حلقة من خلال الكوكيز من خلال الفهرس:

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);
}

ومنذ يمكنك الحصول على الكوكيز عن طريق مؤشر العددي لهم كذلك من الممكن فعلا لمسح الكوكيز متعددة بنفس الاسم دون الحاجة إلى نسخ إلى CookieCollection أو شيء من هذا القبيل.

وهذا ينبغي أن تفعل خدعة:

var cookieName = "yourcookie";
var matches = cookies.AllKeys
    .Select((name, i) => new {name, i})
    .Where(x => x.name == cookieName)
    .Select(x => DoSomethingWithEachMatch(cookies[x.i]));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top