0

这应该很简单,尽管我发现我只能设置 cookie 但不能读回它们,尽管我的浏览器向我显示了 cookie。

在我HomeController的用户输入有效字符串后,我设置了 cookie:

[HttpPost]
public ActionResult Index(string fMemberCode)
{
    try
    {
        // TODO: controller-->member table module-->member data gateway-->DB
        // Check member num against member table
        //  Return cookie if exists
        //  Return error if not
        MembersModule membersModule = new MembersModule();
        int memberId = membersModule.AuthMember(fMemberCode);
        if (memberId > 0)
        {
            HttpCookie mCookie = new HttpCookie("MMedia");
            mCookie.Value = memberId.ToString();
            Response.Cookies.Add(mCookie);
        }
        else { }
        return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}

然后稍后,在不同的上下文中,LibraryController存在检查 cookie 的需求:

public LibraryController()
{
    // TODO
    // Check member cookie present
    int id = int.Parse(Request.Cookies["Media"].Value);
    if (id > 0)
        this.module = new LibraryModule(id);
    else throw new Exception("Invalid cookie");
}

但是,当单步执行 VS2012 中的代码时,执行行LibraryController到达:

int id = int.Parse(Request.Cookies["Media"].Value);

抛出异常:Object reference not set to an instance of an object

4

1 回答 1

6

您无法Request在控制器的构造函数中访问该属性。它在控制器生命周期的那个时候不存在。

也许动作或控制器过滤器可能会对您有所帮助。

于 2013-04-24T00:24:55.380 回答