如何直接从控制器操作访问购物车?

How do I access the shopping cart directly from a controller action?

关于 ASP.NET Core 的最受欢迎的书籍之一是 Adam Freeman 的“Pro ASP.NET Core 3”。

在第 7-11 章中,他构建了一个示例应用程序 SportsStore。

注意右上角的购物车信息:

这通过以下行显示在布局中:

<vc:navigation-menu />

参见 Views/Shared/_Layout.cshtml 第 22 行。

视图的实现位于:

Views/Shared/Components/CartSummary/Default.cshtml

以及 C# 代码位于:

Components/CartSummaryViewComponent.cs

我知道购物车数据的持久性是通过 Startup.cs 中的以下行设置的:

services.AddScoped<Cart>(obj => SessionCart.GetCart(obj));

有关 SessionCart 的详细信息,请参阅 Models/SessionCart.cs

现在开始提问。

我已将以下方法添加到 HomeController:

    [HttpGet]
    public ContentResult CartSize()
    {
        return new ContentResult()
        {
            ContentType = "text/html",
            StatusCode = (int)HttpStatusCode.OK,
            Content = "cart size here"
        };
    }

这是一个非常简单的操作方法,旨在简单地 return 购物车中的商品数量。

鉴于示例项目中购物车的实现方式,在 CartSize 方法中获取购物车中商品数量的好方法是什么?

谢谢!

将购物车服务注入您的控制器并在您的操作方法中使用

  private Cart cart; 

  public MyController(Cart cartService) {

  cart = cartService;
  }

  [HttpGet]
  public ContentResult CartSize()
  {
        return new ContentResult()
        {
            ContentType = "text/html",
            StatusCode = (int)HttpStatusCode.OK,
            Content = cart.Lines.Count().ToString()
        };
   }