我正在学习ASP.NET mvc,因此我扩展了Todo列表教程,因此可以将其用作购物车类的基础。我不知道使用哪个URL来调用Cart控制器的Add方法。
namespace TodoApi.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class TodoController : ControllerBase
{
public static TodoContext _context;
public TodoController(TodoContext context)
{
_context = context;
if (_context.TodoItems.Count() == 0)
{
// Create a new TodoItem if collection is empty,
// which means you can't delete all TodoItems.
_context.TodoItems.Add(new TodoItem { Name = "T-shirt", Price = 5.30 });
_context.TodoItems.Add(new TodoItem { Name = "Fedora Hat", Price = 7.70 });
_context.TodoItems.Add(new TodoItem { Name = "Socks", Price = 1.20 });
_context.SaveChanges();
}
}
}
}
这是TodoContext类
namespace TodoApi.Models
{
public class TodoContext : DbContext
{
public TodoContext(DbContextOptions<TodoContext> options)
: base(options)
{
}
public DbSet<TodoItem> TodoItems { get; set; }
}
}
还有TodoItem
模型:
namespace TodoApi.Models
{
public class TodoItem
{
public long Id { get; set; }
public string Name { get; set; }
public double Price { get; set; }
public bool IsComplete { get; set; }
}
}
这是ShoppingCartContext
类:
namespace TodoApi.Models
{
public class ShoppingCartContext : DbContext
{
public ShoppingCartContext(DbContextOptions<TodoContext> options)
: base(options)
{
}
public DbSet<TodoItem> CartItems { get; set; }
}
}
我需要在控制器中调用Add
方法,但是我没有使用什么URL:
namespace TodoApi.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class CartController : ControllerBase
{
private readonly ShoppingCartContext _context;
public CartController(ShoppingCartContext context)
{
_context = context;
}
[HttpGet]//List all the items in the cart
public ActionResult<List<TodoItem>> GetAll()
{
return _context.CartItems.ToList();
}
[HttpPost]
public IActionResult Add(long id)
{
var item = TodoController._context.TodoItems.Find(id);
System.Console.WriteLine(item.Name + item.Price.ToString());
_context.CartItems.Add(item);
_context.SaveChanges();
return CreatedAtRoute("GetCart", new { id = item.Id }, item);
}
}
}
我有一些使用Django的经验,但是ASP.NET对我来说是全新的,我完全不知道如何解决此问题。
答案 0 :(得分:0)
您的add方法应类似于以下内容,以便您检查是否已经有商品,如果没有,请返回Conflict
HTTP状态码409。 ...或其他东西。
[HttpPost]
public IActionResult Add(TodoItem model)
{
var item = _context.TodoItems.Find(model.Id);
if (item != null)
{
return Conflict();
}
_context.CartItems.Add(model);
_context.SaveChanges();
return CreatedAtRoute("GetCart", new { id = model.Id }, model);
}
我已经传递了ToDoItem,但是我猜测如果您要添加购物车,则需要进行更改。但是现在,如果您将其保留为ToDoItem,则需要创建一个POST:
POST:/ api / cart 身体:
{
"id": 0,
"name": null,
"price": 0.0,
"isComplete": false
}
也是这一行:
CreatedAtRoute("GetCart", new { id = model.Id }, model);
有点错误,因为您没有名为“ GetCart”的路线