.net core 3.0 session的使用 以及 实现购物车 之 session中存储List类型

本文详细介绍了在.NET Core中如何使用会话(session),包括安装和配置Microsoft.AspNetCore.Session包,以及如何在Startup.cs文件中启用会话。此外,还提供了一个自定义的Session扩展类,用于处理复杂数据类型的存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Part 1:

首先.net core 与.net framework 是.net的不同版本。因此session的使用也不同

那么问题来了--.net core中使用session。 它复杂一些。

1.首先需要下载一个插件(Miscrosoft.AspNetCore.Session)

在解决方案的窗口(一般在右边)下你的项目里找到--“依赖项 或者叫dependances”--右击选择“管理Nuget程序包”

--点击打来--在搜索栏输入"session", 一般第一个就是“Miscrosoft.AspNetCore.Session”--安装它。

2.此时运行你 的测试session代码, 还不够, 可能会出现以下问题

“Session has not been configured for this application or request”就是你下载, 但没配置,也不行

3.找到startup.cs这个文件(在目录的最下方);

第一步 :解决方案:在Startup.cs文件中的Configure方法中加上这一句代码: app.UseSession(); 

不行再第二步(引用的图片):对应着方法名, 把大括号里的代码插进去;再试, 那个app.UseMvcWithDefaultRoute()如果报错, 就删掉。 就好了

我的心路。。

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc()
        .AddSessionStateTempDataProvider();
    services.AddSession();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseSession();
    app.UseMvcWithDefaultRoute();
}

 

Part2

HttpContext.Session 可调用get,set方法。但是默认的方法只能保存string类型。

对于保存"购物车"的内容就不够了。

这里购物车 是一个List类型 储存多个商品 (商品是一个类 )

在网上找到一个自定义的Session扩展的类,新建一个类: SessionExtension,

复制注意只复制class 以内的内容

: 如下

--开始代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Newtonsoft.Json;
using System.Text;

namespace ProjetZZ3.Fonction
{
    public static class SessionExtension
    {
        /// <summary>
        /// 设置Session对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="session"></param>
        /// <param name="key"></param>
        /// <param name="obj"></param>
        public static void SetObject<T>(this ISession session, string key, T obj)
        {
            session.SetString(key, JsonConvert.SerializeObject(obj));
        }

        /// <summary>
        /// 获取Session对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="session"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        public static T GetObject<T>(this ISession session, string key)
        {
            T result = default(T);
            var value = session.GetString(key);
            if (!String.IsNullOrEmpty(value))
            {
                result = JsonConvert.DeserializeObject<T>(value);
            }
            return result;
        }

    }

}
-----结束代码

这么一来就可以存储其他类型了: 下面代码红色标记的是使用方法

 

 

//添加到购物车功能

public IActionResult Add()
        {
            Commande c = new Commande("sdasd", 3);//模拟一个新的订单


            List<Commande> panier_dans_session = new List<Commande>();
          
            //if session["panier"] 是空的, 将它添加到原来的购物车中
            if (HttpContext.Session.GetObject<List<Commande>>("panier") != null)
            {
                panier_dans_session = HttpContext.Session.GetObject<List<Commande>>("panier");
                panier_dans_session.Add(c);
                HttpContext.Session.SetObject("panier", panier_dans_session);
            }
            //else session["panier"] est vide, 
            else
            {
                panier_dans_session.Add(c);
                HttpContext.Session.SetObject("panier", panier_dans_session);

            }
            ViewData["panier"] = panier_dans_session;
            return View("Commandes");

        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值