当我尝试访问cookie时,出现以下异常:
对象引用未设置为对象的实例。
这是有问题的一行:
if (Request.Cookies["selectBoxValue"].Value != null)
[Authorize]
public ActionResult Index()
{
if (Request.Cookies["selectBoxValue"].Value != null)
{
HttpCookie groupId = new HttpCookie("selectBoxValue");
groupId = Request.Cookies["selectBoxValue"];
// Collect all comments connected to current group
int t = Convert.ToInt32(groupId.Value);
pv.ListofComments = db.Comments.Where(dp => dp.GroupID == t).ToList();
// Show only groups connected to current user
var CurrentUser = User.Identity.GetUserId();
var groupUser = db.GroupUsers.Where(u => u.ApplicationUserId == CurrentUser).Select(gr => gr.GroupId).ToList();
pv.GroupList = db.Groups.Where(g => groupUser.Contains(g.Id));
return View(pv);
}
答案 0 :(得分:2)
您的错误是因为该链中的某些内容不存在:
if (Request.Cookies["selectBoxValue"].Value != null)
要检查的事项:
var myCookie = Request.Cookies["selectBoxValue"];
myCookie!= null;
myCookie.Length > 0;
您很可能没有Request
上有selectBoxValue
的cookie。由于selectBoxValue
(来自它的名字)听起来就像你的表格本身,我很好奇为什么你要为它检查一个cookie?如果它是来自上一页(不是将请求发送到服务器的那个)的持久值,则称之为比selectBoxValue
更直观的内容。
了解有关如何编写cookie和阅读cookie的更多信息;见Stack Overflow answer。
如果您希望用户拥有一个名为selectBoxValue
的Cookie而他们没有,那么您就会遇到一个特定的问题:无论您在哪里设置该Cookie,都不会在{{{ 1}}。
如果你对它没问题(也就是说,某些代码路径期望cookie而其他代码没有),那么如果该cookie不存在,你可以将你正在玩的对象设置为合理的值:
Response
您的代码也存在一些问题:
int defaultGroupId = 1;
var obj = Request.Cookies["selectBoxValue"] ?? defaultGroupId;
为什么创建cookie只是为了不使用它?
如果您要将Cookie发送到某个地方,则只会创建Cookie。所以在这里你应该写一些像:
if (Request.Cookies["selectBoxValue"].Value != null)
{
HttpCookie groupId = new HttpCookie("selectBoxValue"); //why create one?
groupId = Request.Cookies["selectBoxValue"];
// Collect all comments connected to current group
int t = Convert.ToInt32(groupId.Value);
}
}
答案 1 :(得分:0)
您正在检查Cookie的值是否为空,可能是也可能不是。如果尚未设置cookie,则 cookie本身为空,这意味着如果您尝试访问cookie的值,则会出现异常。
以下是您需要检查的代码段。
//retrieve the cookie
var cookieSelectBoxValue = Request.Cookies["selectBoxValue"];
//Check if the cookie itself is null
if(cookieSelectBoxValue != null)
{
//Retrieve the value of the cookie
var cookieValue = cookieSelectBoxValue.Value;
//Check if the value of the cookie is null
if(cookieValue!= null)
{
//The rest of your logic goes here
}
}
要设置cookie,您可以在Controller Action中使用Response.SetCookie()
方法。这是一个简单的例子:
public ActionResult Index()
{
if (Request.Cookies["selectBoxValue"] != null)
{
var cookie = new HttpCookie("selectBoxValue")
{
Expires = DateTime.Now.AddYears(1),
Value = "CookieValueGoesHere"
};
Response.Cookies.Add(cookie);
}
return View("Index");
}