购物车Cookie不在c#MVC中工作

时间:2015-11-18 11:40:45

标签: c# asp.net asp.net-mvc cookies shopping-cart

这个cookie的目的是(如果cookie存在)记住CartId,以便匿名或注册的用户可以看到他的购物车。如果cookie不存在,则使用GuId创建一个cookie并将cartId存储一段时间。

我尝试以某种方式在此代码中实现: enter image description here

这里的cookie不起作用。它只保存第190行中的cookie,CartId始终为0,另一个if和else语句未被选中。第190行是我写的,因为它抛出了没有这一行的null异常语句。我认为我犯的一个错误是我没有使用第197行以上的当前上下文。 我试图使用HttpContext.Current,它会抛出此错误: enter image description here

请帮我解决,如果可以修复的话。接受任何其他示例或cookie c#shopping cart的URL。提前谢谢。

首次尝试:

public string GetCartId(HttpContextBase context )
    {

       if (context.Request.Cookies["CartId"] == null) return "0";

        string cartId = context.Request.Cookies["CartId"].Value;
        {
            // if the cart ID doesn't exist in the cookie, generate
            // a new ID

            if (context.Request.Cookies["CartId"] == null)
            {

                // generate a new GUID
                cartId = Guid.NewGuid().ToString();
                           // create the cookie object and set its value
                HttpCookie cookie = new HttpCookie("CartId", cartId);
                           // set the cookie's expiration date
                cookie.Expires = DateTime.Now.AddMinutes(2);
                    // set the cookie on the client's browser
                context.Response.Cookies.Add(cookie);
                         // return the CartID
                return cartId.ToString();
            }

            else   // check if the cart ID exists as a cookie
            {
                // return the id
                return cartId;
            }

        }          

    }

这里它将cartId保存为null,而不是检查其他语句

第二次尝试我添加了当前上下文:

if (context.Request.Cookies["CartId"] == null)
            {
                HttpContext context = HttpContext.Current;

用红色加下划线的上下文表示,在此范围内无法声明名为context的本地参数,因为该名称用于封闭的本地范围。

3 个答案:

答案 0 :(得分:0)

在MVC控制器中创建cookie:

HttpCookie cookie = new HttpCookie("Cookie");
cookie.Value = "Hello Cookie! CreatedOn: " + DateTime.Now.ToShortTimeString();
this.ControllerContext.HttpContext.Response.Cookies.Add(cookie);

检查&在MVC控制器中读取cookie:

if (this.ControllerContext.HttpContext.Request.Cookies.AllKeys.Contains("Cookie"))
{
    HttpCookie cookie = this.ControllerContext.HttpContext.Request.Cookies["Cookie"];
...

Cookies.AllKeys.Contains()可以替换您的空检查。

如何调用方法? context 的价值是什么?

可以找到有关Cookie的MSDN文档here...

答案 1 :(得分:0)

在Legacy Asp.net中使用cookie很好,在使用MVC设计模式开发应用程序时,我们还有其他重要的概念来管理状态。

Few are listed below:-
  

TempData的

     

可视数据

     

viewbag

您可以获得解释here

答案 2 :(得分:0)

默认情况下,HttpCookie的HttpOnly属性值为“false”

这意味着您要求浏览器将您的cookie存储在磁盘上

在将Cookie添加到响应之前将其更改为“true”。请注意,如果关闭浏览器的所有实例,客户端cookie将会丢失。

如果这没有帮助,您应该在您的网站上添加隐私政策

试试这个,如果http只是没有用,我们可以选择p3p隐私政策解决方案