ASP.NET HttpResponse Cookies нулевая проверка - PullRequest
0 голосов
/ 13 февраля 2012

У меня есть пустой код проверки, который проверяет, существует ли cookie в объекте ответа:

         if (HttpContext.Current.Response.Cookies["CookieName"] != null)
        {
            sessionCookie = HttpContext.Current.Response.Cookies["CookieName"];
            cookieValue = sessionCookie.Value;
        }

Когда я проверяю через отладчик, ключ не существует до проверки, но он существует после проверки. Таким образом, возвращаемое значение из cookie является нулевым. Создает ли cookie автоматическую проверку наличия файлов cookie?

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 06 декабря 2012

Ответ да , вызов Response.Cookies["CookieName"] любым способом фактически создает cookie.

1 голос
/ 28 августа 2015

Тот случай, когда первый ответ содержит бессмыслицу, не связанную с вопросом.

Каждый раз, когда вы делаете чек:

if (HttpContext.Current.Response.Cookies["CookieName"] != null)

эта строка кода не только проверяет, существует ли cookie, но также создает новый пустой cookie. Даже Get метод создает [ 1 ] новый cookie неявно.

Вы можете использовать код следующим образом:

Cookie existing_cookie = null;
foreach (Cookie c in HttpContext.Current.Response.Cookies)
{
    if ("CookieName" == c.Name)
    {
        existing_cookie = c;
        break;
    }
}
if (null != existing_cookie)
{
    // exists
}

Или используйте LINQ методы, чтобы сделать почти то же самое.

0 голосов
/ 13 февраля 2012

Это происходит потому, что HttpContext.Current связан с потоком, в котором в данный момент выполняется запрос. В другом потоке фреймворк не может знать, какой запрос вы хотите использовать.

Есть способы исправить это - например, .NET BackgroundWorker может распространять контекст в другой поток. Поддержка асинхронных страниц в ASP.NET также правильно распространяет контекст.

Таким образом, у вас есть два варианта: либо переписать весь свой асинхронный код, чтобы использовать асинхронные механизмы передачи контекста, такие как BackgroundWorker или Async Pages, либо изменить свой код, чтобы проверять наличие HttpContext.Current == null, прежде чем пытаться получить доступ к любым свойствам HttpContext. ток

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...