2009-08-31 174 views
4

对于每个请求的页面,我需要检查一个cookie或创建它,如果它不存在。 如果cookie存在,我需要根据该cookie的内容从DB加载一些信息。asp.net mvc无法访问基础控制器中的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'的 控制器时发生错误。

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

它打破了上Request.Cookies时[“MySiteCookie”]

我应该在其他一些这样或那样的地方做这样的逻辑?

回答

9

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

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

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

+1

谢谢 - 使用这个我可以使用: requestContext.HttpContext.Request.Cookies [“MysiteCookie”] – Nils 2009-09-01 07:15:22

0

检查HomeController是否有一个无参数的公共构造函数,并检查是否正在调用父构造函数ApplicationController()

相关问题