0

你可以看到这段代码

[HttpPost]
public ActionResult RemoveFromCart(int id)
{
     // Remove the item from the cart
     var cart = ShoppingCart.GetCart(this.HttpContext);


...

public static ShoppingCart GetCart(HttpContextBase context)
{
    var cart = new ShoppingCart();
    cart.ShoppingCartId = cart.GetCartId(context);
    return cart;
}


// We're using HttpContextBase to allow access to cookies.
public string GetCartId(HttpContextBase context)
{
   if (context.Session[CartSessionKey] == null)
   {
       if (!string.IsNullOrWhiteSpace(context.User.Identity.Name))
       {
            context.Session[CartSessionKey] = context.User.Identity.Name;
       }
       else
       {
             // Generate a new random GUID using System.Guid class
             Guid tempCartId = Guid.NewGuid();

             // Send tempCartId back to client as a cookie
             context.Session[CartSessionKey] = tempCartId.ToString();
        }
   }

   return context.Session[CartSessionKey].ToString();
}

那么为什么我们不能直接使用Session[CartSessionKey]呢?

[HttpPost]
public ActionResult RemoveFromCart(int id)
{
     // Remove the item from the cart
     var cart =  Session[CartSessionKey].ToString();
4

2 回答 2

5

没有实质性区别。on的Session属性Controller实现为:

if (this.HttpContext != null)
    return this.HttpContext.Session;
else
    return null;

这是一个方便的属性,所以你使用哪个并不重要。

于 2013-04-22T18:38:07.460 回答
-2

使用上下文可确保您访问的是正确的会话。在使用之前,您应该始终检查您的 Session 是否为空。这只是很好的编码实践。捷径是懒惰的,会导致错误,而且是不好的做法。

于 2013-04-22T18:34:23.820 回答