.net core mvc中session的应用
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传入到显示页面中(略),问题完成。
.net core mvc中session的应用的更多相关文章
- 007.Adding a view to an ASP.NET Core MVC app -- 【在asp.net core mvc中添加视图】
Adding a view to an ASP.NET Core MVC app 在asp.net core mvc中添加视图 2017-3-4 7 分钟阅读时长 本文内容 1.Changing vi ...
- ASP.NET Core MVC 中的 [Controller] 和 [NonController]
前言 我们知道,在 MVC 应用程序中,有一部分约定的内容.其中关于 Controller 的约定是这样的. 每个 Controller 类的名字以 Controller 结尾,并且放置在 Contr ...
- ASP.NET Core MVC 中设置全局异常处理方式
在asp.net core mvc中,如果有未处理的异常发生后,会返回http500错误,对于最终用户来说,显然不是特别友好.那如何对于这些未处理的异常显示统一的错误提示页面呢? 在asp.net c ...
- 006.Adding a controller to a ASP.NET Core MVC app with Visual Studio -- 【在asp.net core mvc 中添加一个控制器】
Adding a controller to a ASP.NET Core MVC app with Visual Studio 在asp.net core mvc 中添加一个控制器 2017-2-2 ...
- 008.Adding a model to an ASP.NET Core MVC app --【在 asp.net core mvc 中添加一个model (模型)】
Adding a model to an ASP.NET Core MVC app在 asp.net core mvc 中添加一个model (模型)2017-3-30 8 分钟阅读时长 本文内容1. ...
- ASP.NET Core MVC中的 [Required]与[BindRequired]
在开发ASP.NET Core MVC应用程序时,需要对控制器中的模型校验数据有效性,元数据注释(Data Annotations)是一个完美的解决方案. 元数据注释最典型例子是确保API的调用者提供 ...
- ASP.NET Core MVC中构建Web API
在ASP.NET CORE MVC中,Web API是其中一个功能子集,可以直接使用MVC的特性及路由等功能. 在成功构建 ASP.NET CORE MVC项目之后,选中解决方案,先填加一个API的文 ...
- 【ASP.NET Core快速入门】(五)命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options
命令行配置 我们通过vs2017创建一个控制台项目CommandLineSample 可以看到现在项目以来的是dotnet core framework 我们需要吧asp.net core引用进来,我 ...
- 在ASP.NET Core MVC中子类Controller拦截器要先于父类Controller拦截器执行
我们知道在ASP.NET Core MVC中Controller上的Filter拦截器是有执行顺序的,那么如果我们在有继承关系的两个Controller类上,声明同一种类型的Filter拦截器,那么是 ...
- 菜鸟入门【ASP.NET Core】5:命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options
命令行配置 我们通过vs2017创建一个控制台项目CommandLineSample 可以看到现在项目以来的是dotnet core framework 我们需要吧asp.net core引用进来 ...
随机推荐
- 动态路由里,将component字符串改变为路由懒加载方法
一.import写法 报错 function loadPageByRoutes(str) { // 传入的str为 '@/views/Home.vue' 这种格式 return () => im ...
- docker打包java
java1.8镜像 localtime文件为/etc/localtime 将本地此文件打包到docker镜像中 FROM openjdk:8-jdk-alpine MAINTAINER geyanan ...
- lnmp 修改MySQL默认密码
wget http://soft.vpser.net/lnmp/ext/reset_mysql_root_password.sh;sh reset_mysql_root_password.sh 执行命 ...
- linux 安装 sysbench 和 使用
安装 执行 下载命令 curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | su ...
- php中self和$this还有parent的区别
1.self代表类,$this代表对象 2.能用$this的地方一定使用self,能用self的地方不一定能用$this 3.parent只能调用静态属性,并且可以调用父类中公有和受保护的方法 静态的 ...
- go理论知识总结
基于const常量理解个中类型的内存分配引入参考 官方:Constant expressions may contain only constant operands and are evaluate ...
- LeetCode系列之 (JavaScript) => 88. 合并两个有序数组
题目描述: [Leetcode 题目链接]:88. 合并两个有序数组 - 力扣(LeetCode) (leetcode-cn.com) 解题思路分析: 在nums1中找到nums2 插入的位置,然后在 ...
- Centos7部署PXE+Kickstart 实现批量安装操作系统
1.PXE环境概述 作为一名运维人员,在一些中小公司经常会遇到一些机械式的重复工作,比如:批量一次大批量的进行操作系统的安装等等.为了实现自动化运维,减少人员负担我们可以部署以下服务:Kickstar ...
- 2022/7/28 第七组陈美娜 API类
API:Application Program Interface应用程序接口 JDK给我们提供的一些已经写好的类,可以直接调方法来解决问题 类的方法在宏观上都可以称为接口 接口:1.interfac ...
- MySQL日常维护指南
一.常用命令 1.查看数据库默认编码 show variables like 'character%'; show variables like 'collation%'; 2.启动停止数据库 /et ...