【发布时间】:2018-01-09 13:36:00
【问题描述】:
我正在用 ASP.NET 设计一个电子商务购物车。当用户单击“添加到购物车”时,我正在检查 cookie 是否包含购物车 ID。如果没有,我创建一个新的购物车,否则我从数据库中检索购物车。 以下是购物车服务类
using LaptopMart.Contracts;
using LaptopMart.Models;
using System;
using System.Linq;
using System.Web;
namespace LaptopMart.Services
{
public class CartService : ICartService
{
public const string CartSessionName = "eCommerceCart";
private readonly IUnitOfWork _unitOfWork;
public CartService(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}
public Cart GetCart(HttpContextBase httpContextBase, bool createIfNull)
{
HttpCookie cookie = httpContextBase.Request.Cookies.Get(CartSessionName);
Cart cart = null;
if (cookie != null)
{
string strCartId = cookie.Value;
int cartId = 0;
if (!string.IsNullOrEmpty(strCartId))
{
cartId = Convert.ToInt32(strCartId);
cart = _unitOfWork.CartRepository.Read(cartId);
}
else if (createIfNull)
{
cart = CreateNewCart(httpContextBase);
}
} else if (createIfNull)
{
cart = CreateNewCart(httpContextBase);
}
return cart;
}
private Cart CreateNewCart(HttpContextBase httpContextBase)
{
Cart cart = new Cart();
_unitOfWork.CartRepository.Create(cart);
_unitOfWork.Complete();
HttpCookie cookie = new HttpCookie(CartSessionName);
cookie.Value = Convert.ToString(cart.Id);
cookie.Expires = DateTime.Now.AddDays(1);
httpContextBase.Response.Cookies.Add(cookie);
return cart;
}
public void AddToCart(int productId, HttpContextBase httpContextBase)
{
Cart cart = GetCart(httpContextBase, true);
var cartItem = cart.CartItems.FirstOrDefault(c => c.ProductId == productId);
if (cartItem == null)
{
cartItem = new CartItem()
{
ProductId = productId,
Quantity = 1
};
cart.CartItems.Add(cartItem);
}
else
{
cartItem.Quantity += 1;
}
_unitOfWork.Complete();
}
public void RemoveFromCart(int productId, HttpContextBase httpContextBase)
{
Cart cart = GetCart(httpContextBase, false);
if (cart != null)
{
var cartItem = cart.CartItems.FirstOrDefault(c => c.ProductId == productId);
cart.CartItems.Remove(cartItem);
_unitOfWork.Complete();
}
}
}
}
当用户点击添加到购物车时,这就是我当前在 MVC 控制器中所做的事情
public ActionResult AddToCart(string id)
{
_cartService.AddToCart(id, this.HttpContext);
return RedirectToAction("Index");
}
但是,我想要做的是,当用户单击“添加到购物车”时,我想向没有 HttpContext 属性的 Web Api 2 控制器发送 ajax 调用。有人可以帮助我如何实现这一目标。
【问题讨论】:
标签: asp.net asp.net-web-api asp.net-web-api2 cart