1

在我的控制器的构造函数中,我检查是否有 cookie,但我有一个 System.NullReferenceException,有什么问题?

public CartController()
    {
        if (Request.Cookies["cart"] != null)
        {
            //do something
        }

    }
4

2 回答 2

1

我的猜测是,Request在控制器的生命周期中,该对象没有正确初始化。这段代码可能不应该放在控制器的构造函数中。而是尝试将其放在一个动作中:

public ActionResult Index()
{
    if (Request.Cookies["cart"] != null)
    {
        //do something
    }
}

如果您想在多个操作中共享此代码,请尝试创建一个内部帮助方法,然后从您的操作中调用它,如下所示:

private void InitCart()
{
    if (Request.Cookies["cart"] != null)
    {
        //do something
    }
}

public ActionResult Index()
{
    InitCart();
}
于 2013-07-21T10:29:38.867 回答
0

如果您使用动作过滤器而不是将代码放在构造函数中,这可能会帮助您避免代码中的重复。

添加一个派生自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.
      }
 }
于 2013-07-22T10:08:21.127 回答