Рассматриваемый код:
var arrVal = cookie.Value.Split('.');
Я попробовал следующий синтаксис в соответствии с документацией, но, похоже, он не работает.
var arrVal = cookie["Value"].Split('.');
Для остальной части кода контекста:
public IList<CookieType> GetAcceptedCookieTypes(HttpContext httpContext)
{
var result = new List<CookieType>();
// accepted by default
result.Add(CookieType.Essential);
var cookie = httpContext.Request.Cookies["cc_cookie_accept"];
if (cookie != null)
{
var arrVal = cookie.Value.Split('.');
if (arrVal != null && arrVal.Length > 1)
{
var arrCheck = arrVal[1];
if (arrCheck.Length > 0 && arrCheck[0] == '1')
{
result.Add(CookieType.Statistical);
}
}
}
return result;
}
Это ошибка, которую я получаю:
CS1061: «строка» не содержит определения для «значения», и не удалось найти доступный метод расширения «значение», принимающий первый аргумент типа «строка» (вам не хватает директивы использования или ссылки на сборку?)
Я проверил документы и IRequestCookieCollection[String]
всегда возвращал строку? возвращаясь к ASP.NET Core 1.0 . Ваш код не мог быть скомпилирован с ASP.NET Core 5.0, где единственным изменением было добавление аннотации, допускающей значение NULL.
Так или иначе. чтобы исправить это, просто удалите часть .Value
.
Спасибо, вроде разобрался! Пожалуйста, ответьте правильно, чтобы я тоже мог принять это как ответ ^^
Я отмечаю, что в ASP.NET для .NET Framework (2001–2015) коллекция Request.Cookies
действительно возвращала System.Web.HttpCookie
объекты, у которых есть свойство .Value
, но это совсем не .NET 5.
Я проверил документы и IRequestCookieCollection[String]
всегда возвращал строку? возвращаясь к ASP.NET Core 1.0 . Ваш код не мог быть скомпилирован с ASP.NET Core 5.0, где единственным изменением было добавление аннотации, допускающей значение NULL.
Я отмечаю, что в ASP.NET для .NET Framework (2001-2015) коллекция Request.Cookies
действительно возвращала объекты System.Web.HttpCookie, которые имеют свойство .Value, но это совсем не .NET 5.
Так или иначе. чтобы исправить это, просто удалите часть .Value
.
Я смотрел на это недавно, и документация, кажется, немного конфликтует. В Net 6 Core cookie всегда возвращает строку, если я что-то не пропустил, свойства Value
нет. Я использую VS2022. Я не добавил ничего особенного в свой проект, чтобы это работало.
Так что я сделал это
Создал модель с вещами, которые я хочу хранить
public class CookieDataViewModel
{
public int UserId { get; set; }
public string Language { get; set; } = string.Empty;
}
Затем, чтобы сохранить файл cookie, я делаю это
CookieOptions loginCookie = new() { Expires = DateTime.Now.AddMinutes(5), Path = "/" };
CookieDataViewModel cookieDataViewModel = new CookieDataViewModel { UserId = user.ID, Language = "en" };
string cookieData = JsonConvert.SerializeObject(cookieDataViewModel);
Response.Cookies.Append(userCookieName, cookieData, loginCookie);
И чтобы вернуть его, я делаю это
CookieDataViewModel? cookieDataViewModel = JsonConvert.DeserializeObject<CookieDataViewModel>(cookie);
... cookieDataViewModel.UserId ...
... cookieDataViewModel.Language ...
Это отлично работает для того, что мне нужно :)
Я не знаю о каких-либо изменениях файлов cookie между ASP.NET Core 5 и 6. Какую именно ошибку вы получаете?