Asp.net mvc 检查cookies.net mvc中的异常
在我的控制器的构造函数中,我正在检查是否存在cookie,但我有一个System.NullReferenceException,怎么了Asp.net mvc 检查cookies.net mvc中的异常,asp.net-mvc,cookies,Asp.net Mvc,Cookies,在我的控制器的构造函数中,我正在检查是否存在cookie,但我有一个System.NullReferenceException,怎么了 public CartController() { if (Request.Cookies["cart"] != null) { //do something } } 我的猜测是,请求对象在控制器生命周期的那个点没有正确初始化。这段代码可能不应该出现在控制器的构造函数中。
public CartController()
{
if (Request.Cookies["cart"] != null)
{
//do something
}
}
我的猜测是,
请求
对象在控制器生命周期的那个点没有正确初始化。这段代码可能不应该出现在控制器的构造函数中。而是试着将其付诸行动:
public ActionResult Index()
{
if (Request.Cookies["cart"] != null)
{
//do something
}
}
如果要跨多个操作共享此代码,请尝试创建一个内部帮助器方法,然后从操作中调用它,如下所示:
private void InitCart()
{
if (Request.Cookies["cart"] != null)
{
//do something
}
}
public ActionResult Index()
{
InitCart();
}
我的猜测是,
请求
对象在控制器生命周期的那个点没有正确初始化。这段代码可能不应该出现在控制器的构造函数中。而是试着将其付诸行动:
public ActionResult Index()
{
if (Request.Cookies["cart"] != null)
{
//do something
}
}
如果要跨多个操作共享此代码,请尝试创建一个内部帮助器方法,然后从操作中调用它,如下所示:
private void InitCart()
{
if (Request.Cookies["cart"] != null)
{
//do something
}
}
public ActionResult Index()
{
InitCart();
}
如果使用动作过滤器而不是将代码放在构造函数中,这可能有助于避免代码中的重复 将源自
ActionFilterAttribute
的属性添加到控制器:
[MyActionFilter]
public CartController()
{
}
然后,此筛选器拦截每个操作
public class MyActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var request = filterContext.HttpContext.Request;
// Do something with request....
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
// Do anything else if you feel like it.
}
}
如果使用动作过滤器而不是将代码放在构造函数中,这可能有助于避免代码中的重复 将源自
ActionFilterAttribute
的属性添加到控制器:
[MyActionFilter]
public CartController()
{
}
然后,此筛选器拦截每个操作
public class MyActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var request = filterContext.HttpContext.Request;
// Do something with request....
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
// Do anything else if you feel like it.
}
}
如果我想把cookies的数据放在构造函数中的一个私有变量中怎么办?@Buboon很难说没有看到更多的代码,但实际上你可能不应该看到。MVC
控制器
应该是无状态的。如果您需要在单个请求期间保存一些数据,只需将其存储在局部变量中,而不是存储在实例属性/字段中。如果必须在请求之间保存一些数据,则可能应将其存储在会话
、临时数据
、后端数据库或其他位置,具体取决于数据的性质。在构造函数中,我将cookie化,并将其保存在私有变量中。在其他方法中,我使用此变量并将结果保存在coockies中。@Buboon在操作开始时将其反序列化为局部变量,操作该变量,将其作为参数传递给可能需要的任何方法,并在操作结束时将其序列化回Cookies
集合。@Buboon很乐意提供帮助。如果您在实现该解决方案时还有任何问题,您可以随时再次询问。快乐编码:)如果我想把cookies的数据放在构造函数的一个私有变量中怎么办?@Buboon很难说没有看到更多的代码,但实际上你可能不应该看到。MVC控制器
应该是无状态的。如果您需要在单个请求期间保存一些数据,只需将其存储在局部变量中,而不是存储在实例属性/字段中。如果必须在请求之间保存一些数据,则可能应将其存储在会话
、临时数据
、后端数据库或其他位置,具体取决于数据的性质。在构造函数中,我将cookie化,并将其保存在私有变量中。在其他方法中,我使用此变量并将结果保存在coockies中。@Buboon在操作开始时将其反序列化为局部变量,操作该变量,将其作为参数传递给可能需要的任何方法,并在操作结束时将其序列化回Cookies
集合。@Buboon很乐意提供帮助。如果您在实现该解决方案时还有任何问题,您可以随时再次询问。快乐编码:)