request.cookies가 foreach loop에서 httpcookie 객체 대신 문자열을 반환하는 이유는 무엇입니까?

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

  •  06-07-2019
  •  | 
  •  

문제

오늘 아침 나는 실수로 다음 스 니펫 코드를 보았습니다. 매우 잘 작동하기 때문에 상당히 놀랐습니다.

논리를 보지 마십시오. 왜냐하면 나는 왜 HTTPCookieCollection (request.cookies)이 Foreach Loop의 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);
    }
}
도움이 되었습니까?

해결책

키에 의한 컬렉션을 통해 반복하는 것이 더 합리적입니다. 그렇게하면 두 키 모두에 액세스 할 수 있고 전화를 통해 값에 쉽게 액세스 할 수 있습니다. 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);
}

수치 지수로 쿠키를 얻을 수 있으므로 실제로 CookieCulection 또는 그와 비슷한 것에 복사하지 않고도 같은 이름으로 여러 쿠키를 스캔 할 수 있습니다.

이것은 트릭을 수행해야합니다.

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