request.cookies가 foreach loop에서 httpcookie 객체 대신 문자열을 반환하는 이유는 무엇입니까?
-
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]));
제휴하지 않습니다 StackOverflow