今天仔细了看了它的流程和页面的一些逻辑 发现一个以前不是常用的东西。求大侠解释下谢谢。
图片:
代码:
public ActionResult AddToCart(int id)
{
// Retrieve the album from the database
var addedAlbum = storeDB.Albums
.Single(album => album.AlbumId == id);
// Add it to the shopping cart
var cart = ShoppingCart.GetCart(this.HttpContext);
cart.AddToCart(addedAlbum);
// Go back to the main store page for more shopping
return RedirectToAction("Index");
}
这一个ShoppingCart.GetCart(this.HttpContext);
的上下文对象,对应的方法。
public const string CartSessionKey = "CartId"; 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();
}
之后呈现的页面
不明白他的业务逻辑 就是他这样做的目的 主要是这个上下文对象 。
2 回答
largeQ
TA贡献2039条经验 获得超7个赞
从 楼主 贴的代码看,不传递 this.HttpContext ,直接在 ShoppingCart 使用这个HttpContext也是可以的。
可能是 这个 ShoppingCart 购物车 毕竟是一个对象,为了到达和HttpContext 解耦,而用HttpContextBase,这样的话,可以很好的进行单元测试。
- 2 回答
- 0 关注
- 378 浏览
添加回答
举报
0/150
提交
取消