首页 > 其他分享 >.net core mvc中session的应用

.net core mvc中session的应用

时间:2022-12-18 15:46:51浏览次数:48  
标签:core string app value class session net public

1、首先新建一个空的web项目,在Program.cs中打开和使用session

public class Program
    {
        public static void Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);

            // Add services to the container.
            builder.Services.AddSession();
            builder.Services.AddControllersWithViews();

            var app = builder.Build();

            // Configure the HTTP request pipeline.
            if (!app.Environment.IsDevelopment())
            {
                app.UseExceptionHandler("/Error");
            }

            app.UseSession();

            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthorization();

            app.MapDefaultControllerRoute();

            app.Run();
        }
    }

2、设置session扩展,新建SessionExtension类

public static class SessionExtension
    {
        public static void SetObject(this ISession session, string key, object value)
        {
            session.SetString(key, JsonConvert.SerializeObject(value));
        }
        //获取对象方法
        public static T GetObject<T>(this ISession session, string key)
        {
            var value = session.GetString(key);

            return value == null ? default(T) : JsonConvert.DeserializeObject<T>(value);
        }
    }

3、新建控制器基类

    public class BaseController:Controller
    {
        protected UserInfo CurrentUser
        {
            get
            {
                return HttpContext.Session.GetObject<UserInfo>("userinfo");
            }
            set
            {
                HttpContext.Session.SetObject("userinfo", value);
            }
        }
    }

4、新建控制权限和登陆的鉴权授权属性类,如果不符合要求则进行跳转

public class AuthAttribute: Attribute, IAuthorizationFilter
    {
        private string Roles;

        public AuthAttribute()
        {
            Roles = string.Empty;
        }

        public AuthAttribute(string roles)
        {
            Roles = roles;
        }


        public void OnAuthorization(AuthorizationFilterContext filterContext)
        {
            UserInfo userinfo = (UserInfo)filterContext.HttpContext.Session.GetObject<UserInfo>("userinfo");
            if (userinfo == null)
            {
                filterContext.Result = new RedirectToActionResult("index","login",null);
            }
        }

5、新建两个控制器,一个为登陆使用,一个为主页面,显示session中的用户信息

logincontroller.cs

    public class LoginController : BaseController
    {
        public IActionResult Index()
        {
            return View();
        }

        [HttpPost]
        public IActionResult Login([FromForm] string userId, [FromForm] string passWord)
        {
            UserInfo userInfo = new UserInfo()
            {
                userName = "超级管理员",
                rolesName="管理员、查询、添加、编辑"
            };
            CurrentUser = userInfo;
            return RedirectToAction("index","home");
        }
    }

homecontroller.cs

    [Auth] //用来控制权限及是否登陆
    public class HomeController : BaseController
    {
        public IActionResult Index()
        {
            return View(CurrentUser);
        }
    }

 测试一下,先启动,会进home界面,触发auth判断,没有session返回到login界面,登陆后重新进入home界面,model传入到显示页面中(略),问题完成。

标签:core,string,app,value,class,session,net,public
From: https://www.cnblogs.com/youyuan1980/p/16990438.html

相关文章

  • 使用WPF或AspNetCore创建简易版ChatGPT客户端,让ChatGPT成为你的私人助理
    前言:前一天写的一个ChatGPT服务端,貌似大家用起来还不是那么方便,所以我顺便用WPF和AspNetCore的webapi程序做个客户端吧,通过客户端来快速访问chatgpt模型生成对话。 1、......
  • .NET&Web前端-大三-员工疫情管理
    .NET&Web前端-大三-员工疫情管理目录​​.NET&Web前端-大三-员工疫情管理 ​​​​语言和环境​​​​素材​​​​实现功能​​​​数据库设计​​​​具体要求及推荐实现......
  • ADO.NET连接MySQL注意细节
    Nuget安装MySQL包MySql.Data.MySqlClient几个数据库对象的前缀为:MySQL比如:MySqlConnection连接字符串可以参考这里:https://www.cnblogs.com/cqpanda/p/16316311.......
  • EF Core无法翻译groupby等子查询
    烦人的表达式转化错误varquery1=emps.Grouby(v=>v.DeptId).Select(g=>new{DeptId=g.Key,Salary=g.Max(x=>x.Salary);varresult=fromdindeptsjoi......
  • telnet、wirshark等工具介绍
    1. telnet工具  1.1介绍       (1)telnet是一个命令行运行的客户端TCP通信工具      (2)可以接收数据、也可发送数据,windows和linux上都能用......
  • Kubernetes(k8s) kubectl rollout status常用命令
    kubectl在$HOME/.kube目录中查找一个名为config的配置文件。可以通过设置KUBECONFIG环境变量或设置--kubeconfig参数来指定其它kubeconfig文件。本文主要介绍K......
  • CSharp: Chain of Responsibility Pattern in donet core 6
     usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceGeovin.Du.DuChainOfResponsib......
  • 基于.NetCore开发博客项目 StarBlog - (21) 开始开发RESTFul接口
    前言最近电脑坏了,开源项目的进度也受到一些影响这篇酝酿很久了,作为本系列第二部分(API接口开发)的第一篇,得想一个好的开头,想着想着就鸽了好久,索性不扯那么多了,直接开写吧~......
  • Json Net 简单的文件读取和写入
    ▲读写的文件XiaoMing.json:{"Name":"小明","Sex":"男","Age":12}JsonWriteTest.json:{"StartX":1.23,"StartY":1.24,"EndX":10,"EndY":"YY","Fa......
  • Arduino UNO使用esp8266以TCP方式连接onenet云
    1.在onenet云平台上先创建一个TCP类型的产品 <1>打开onenet云平台,选择旧版,点击控制台,选择多协议接入(没有注册的先注册)图1-1 <2>多协议接入中选择TCP透传 图1-2......