代码之家  ›  专栏  ›  技术社区  ›  Nils

ASP.NET MVC无法访问基控制器中的cookie数据

  •  4
  • Nils  · 技术社区  · 17 年前

    对于每一个请求的页面,我都需要检查一个cookie或者创建它,如果它不在那里的话。 如果存在cookie,我需要根据该cookie的内容从数据库加载一些信息。

    为此,我创建了一个名为AppController的基本控制器,我的其他控制器从它继承。

    然后我有类似的东西(这样所有控制器都可以使用currentSessionValues对象):

        public MySession CurrentSessionValues;
        public ApplicationController()
        {
            if (Request.Cookies["MySiteCookie"] == null)
            {
                // create new Record in DB
                CurrentSessionValues = CreateMySession();
                HttpCookie cookie = new HttpCookie("MySiteCookie");
                cookie.Value = CurrentSessionValues.SessionID.ToString;
                Response.SetCookie(cookie);
            }
            else
            {
               // use the value in MySiteCookie to get values from the DB
               // e.g. logged in user id, cart id, etc
            }
    
        }
    

    当我运行这个时,我在default.aspx中得到这个错误:

    创建时出错 类型控制器 'mvc_learn.controllers.homecontroller'。

    如果控制器没有 控制器工厂,确保 无参数公共构造函数。

    它根据请求中断。cookies[“mysitecookie”]

    我应该用其他方式还是其他方式来做这个逻辑?

    2 回复  |  直到 17 年前
        1
  •  9
  •   Wyatt Barnett    17 年前

    技巧是您不必在构造函数中有上下文。相反,您应该重写初始化方法:

    protected override void Initialize(System.Web.Routing.RequestContext requestContext)
    {
        //check request context for cookie and do your thang.
    }
    

    PS:对于子孙后代,我应该注意为什么会有错误。异常信息的关键部分是在创建控制器时发生了错误,在这种情况下,无参数的构造函数位是一个红鲱鱼。发生的错误是httpContext的空引用异常。

        2
  •  0
  •   Rob    17 年前

    检查一下 HomeController 具有无参数公共构造函数,并检查父构造函数 ApplicationController() 正在被呼叫。