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的应用的更多相关文章

  1. 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 ...

  2. ASP.NET Core MVC 中的 [Controller] 和 [NonController]

    前言 我们知道,在 MVC 应用程序中,有一部分约定的内容.其中关于 Controller 的约定是这样的. 每个 Controller 类的名字以 Controller 结尾,并且放置在 Contr ...

  3. ASP.NET Core MVC 中设置全局异常处理方式

    在asp.net core mvc中,如果有未处理的异常发生后,会返回http500错误,对于最终用户来说,显然不是特别友好.那如何对于这些未处理的异常显示统一的错误提示页面呢? 在asp.net c ...

  4. 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 ...

  5. 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. ...

  6. ASP.NET Core MVC中的 [Required]与[BindRequired]

    在开发ASP.NET Core MVC应用程序时,需要对控制器中的模型校验数据有效性,元数据注释(Data Annotations)是一个完美的解决方案. 元数据注释最典型例子是确保API的调用者提供 ...

  7. ASP.NET Core MVC中构建Web API

    在ASP.NET CORE MVC中,Web API是其中一个功能子集,可以直接使用MVC的特性及路由等功能. 在成功构建 ASP.NET CORE MVC项目之后,选中解决方案,先填加一个API的文 ...

  8. 【ASP.NET Core快速入门】(五)命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options

    命令行配置 我们通过vs2017创建一个控制台项目CommandLineSample 可以看到现在项目以来的是dotnet core framework 我们需要吧asp.net core引用进来,我 ...

  9. 在ASP.NET Core MVC中子类Controller拦截器要先于父类Controller拦截器执行

    我们知道在ASP.NET Core MVC中Controller上的Filter拦截器是有执行顺序的,那么如果我们在有继承关系的两个Controller类上,声明同一种类型的Filter拦截器,那么是 ...

  10. 菜鸟入门【ASP.NET Core】5:命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options

      命令行配置 我们通过vs2017创建一个控制台项目CommandLineSample 可以看到现在项目以来的是dotnet core framework 我们需要吧asp.net core引用进来 ...

随机推荐

  1. const引用和指针

    1.可以为const引用初始化一个非const的对象.字面值,甚至是一般表达式. 2.对引用初始化时必须严格进行类型匹配,但是const引用初始化时不需要类型匹配,只要可以转换为const所定义的类型 ...

  2. 2.TS 的数据类型

    一.定义变量 TS 中创建变量有四个要素: 定义变量的关键字:var.let.const 变量名 变量的数据类型 变量的初始值 语法结构如下: let 变量名: 数据类型 = 初始值 注意,变量的初始 ...

  3. Gif多图:我常用的 16 个 Sublime Text 快捷键 - 文章 - 伯乐在线

    Gif多图:我常用的 16 个 Sublime Text 快捷键 2014/12/23 · 书籍与教程, 开发 · 4 评论· Sublime Text 分享到: 139 .imooc, .imooc ...

  4. Mysql语句练习

    某宾馆其关系模式如下:Room(房间编号,房间类型,价格)Customer(顾客编号,顾客姓名,年龄,电话)RC(房间号,顾客编号,入住日期,入住天数) 1 create database Hotel ...

  5. APP性能测试——冷启动耗时测试

    冷启动耗时: 即后台没有该应用的进程(我们使用am force-stop命令结束app运行),打开软件,直到进入到首页activity页面,并计算耗时. 示例代码: import os import ...

  6. keras构建1D-CNN模型

    接触过深度学习的人一定听过keras,为了学习的方便,接下来将要仔细的讲解一下这keras库是如何构建1D-CNN深度学习框架的 from keras.datasets import imdb fro ...

  7. js之对象处理

    数据拼接一: 原始数据为对象 { 0grade: "" 0home: "萍钢四切(边部钩痕)" 0price: "3200" 0produc ...

  8. React之一个组件的诞生

    此处以input组件为例 input.js import React from 'react' class Input extends React.Component { // ps:使用static ...

  9. test image size

    676KB - jpg 2.5M jpg 3.8M-jpg 4M

  10. element-ui switch

    <el-tooltip :content="'Switch value: ' + value" placement="top"> <el-sw ...