在我的控制器的构造函数中,我检查是否有 cookie,但我有一个 System.NullReferenceException,有什么问题?
public CartController()
{
if (Request.Cookies["cart"] != null)
{
//do something
}
}
在我的控制器的构造函数中,我检查是否有 cookie,但我有一个 System.NullReferenceException,有什么问题?
public CartController()
{
if (Request.Cookies["cart"] != null)
{
//do something
}
}
我的猜测是,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();
}
如果您使用动作过滤器而不是将代码放在构造函数中,这可能会帮助您避免代码中的重复。
添加一个派生自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.
}
}