对于每个请求的页面,我需要检查一个cookie或创建它,如果它不存在.如果cookie在那里,我需要根据该cookie的内容从DB加载一些信息.
为此,我创建了一个名为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
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我在default.aspx中收到此错误:
创建"Mvc_Learn.Controllers.HomeController"类型的控制器时发生错误.
如果控制器没有控制器工厂,请确保它具有无参数的公共构造函数.
它在Request.Cookies ["MySiteCookie"]上中断
我应该以其他方式或其他地方做这个逻辑吗?
技巧是你必须在构造函数中没有上下文.相反,您应该重写Initialize方法:
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
//check request context for cookie and do your thang.
}
Run Code Online (Sandbox Code Playgroud)
PS:对于子孙后代,我应该注意为什么会有错误.异常信息的关键部分是在创建控制器时发生错误,在这种情况下,无参数构造函数位是红色鲱鱼.发生的错误是HttpContext的空引用异常.
| 归档时间: |
|
| 查看次数: |
3598 次 |
| 最近记录: |