C# 如何在ApicController中使用会话

C# 如何在ApicController中使用会话,c#,asp.net-mvc,session,asp.net-apicontroller,C#,Asp.net Mvc,Session,Asp.net Apicontroller,我有一个APIController,它存储一个列表值,我希望列表项持久化,并使用会话获取项目并将其发布到列表中,以便将其拉入视图以显示购物车项目 我不太确定在哪里使用会话以及如何创建会话,因为我是会话新手 APIController: using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; usi

我有一个APIController,它存储一个
列表
值,我希望列表项持久化,并使用会话获取项目并将其发布到列表中,以便将其拉入视图以显示购物车项目

我不太确定在哪里使用会话以及如何创建会话,因为我是会话新手

APIController:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using System.Web;
using System.Web.UI;
using Microsoft.AspNetCore.Http;
using fyp.Models;


namespace fyp.Controllers
{
    [Route("api/Cart")]
    public class CartAPIController : Controller
    {
        private List<Cart> cart = new List<Cart>()
        {
            new Cart {  CartId = 1,
                    FoodId = 6,
                    FoodName = "Beef & Tendon with Noodle",
                    quantity = 1,
                    price = 7},
            new Cart {  CartId = 1,
                    FoodId = 1,
                    FoodName = "Curry Beef Gravy with Beef Noodle",
                    quantity = 2,
                    price = 6}
        };


        // GET: api/<controller>
        [HttpGet]
        public IActionResult Get()
        {
            return Ok(cart);
        }

        // GET api/<controller>/5
        [HttpGet("{id}")]
        public string Get(int id)
        {
            return "value";
        }

        // POST api/<controller>
        [HttpPost]
        public IActionResult Post(Cart cart)
        {
            if (ModelState.IsValid)
            {
                this.cart.Add(
                    new Cart
                    {
                        CartId = cart.CartId,
                        FoodId = cart.FoodId,
                        FoodName = cart.FoodName,
                        quantity = cart.quantity,
                        price = cart.price
                    });
                return Ok();
            }
            else
            {
                return BadRequest();
            }
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Threading.Tasks;
使用Microsoft.AspNetCore.Mvc;
使用System.Web;
使用System.Web.UI;
使用Microsoft.AspNetCore.Http;
使用fyp模型;
名称空间fyp.Controllers
{
[路线(“api/购物车”)]
公共类CartaPicController:控制器
{
私有列表购物车=新列表()
{
新购物车{CartId=1,
FoodId=6,
FoodName=“牛肉筋配面条”,
数量=1,
价格=7},
新购物车{CartId=1,
FoodId=1,
FoodName=“咖喱牛肉肉汁配牛肉面”,
数量=2,
价格=6}
};
//获取:api/
[HttpGet]
public IActionResult Get()
{
返回Ok(购物车);
}
//获取api//5
[HttpGet(“{id}”)]
公共字符串Get(int-id)
{
返回“值”;
}
//后api/
[HttpPost]
公共IActionResult Post(购物车)
{
if(ModelState.IsValid)
{
这个是.cart.Add(
新手推车
{
CartId=cart.CartId,
FoodId=cart.FoodId,
FoodName=cart.FoodName,
数量=购物车数量,
价格
});
返回Ok();
}
其他的
{
返回请求();
}
}
}
}
列表中的项目仅用于测试,但如何在会话中实现空列表?

提供了有关如何在asp.net应用程序中使用
会话的信息

基本上,您似乎将现有的
this.cart
替换为
Session[“cart”]
,因此您的帖子类似于:

    public IActionResult Post(Cart cart)
    {
        if (ModelState.IsValid)
        {
            Session["cart"].Add(
                new Cart
                {
                    CartId = cart.CartId,
                    FoodId = cart.FoodId,
                    FoodName = cart.FoodName,
                    quantity = cart.quantity,
                    price = cart.price
                });
            return Ok();
        }
        else
        {
            return BadRequest();
        }
    }

API是完全无状态的。前端和Api控制器之间没有会话。您应该使用MVC控制器,而不是Api控制器。但是我需要JSON格式的数据,以便在jquery中实时显示,还有其他选择吗?您可以使用浏览器的localstorage会话如何在Api完全无状态的情况下使用Api?我相信基本上,
会话
变量被序列化为cookie并传递到UI,因此,实际上,状态是在发布页面时传递给服务器的cookie中。没有兄弟。除了MVC,API是不可能的。