mvc音乐商店的购物的一段代码解析 路过的大侠帮忙看看 谢谢!没什么豆

今天仔细了看了它的流程和页面的一些逻辑  发现一个以前不是常用的东西。求大侠解释下谢谢。 图片:   代码: 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(); } 之后呈现的页面 不明白他的业务逻辑 就是他这样做的目的 主要是这个上下文对象  。
www说
浏览 379回答 2
2回答

largeQ

从 楼主 贴的代码看,不传递 this.HttpContext ,直接在 ShoppingCart 使用这个HttpContext也是可以的。 可能是 这个 ShoppingCart 购物车 毕竟是一个对象,为了到达和HttpContext 解耦,而用HttpContextBase,这样的话,可以很好的进行单元测试。
打开App,查看更多内容
随时随地看视频慕课网APP