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. Liunx 日志检索 grep -v -a awk

    grep -5 'parttern' inputfile.log //打印匹配行的前后5行   grep -C 5 'parttern' inputfile.log //打印匹配行的前后5行   gr ...

  2. Oracle 数据库升级过程中的主要步骤

    Oracle 数据库升级包括六个主要步骤. Oracle 数据库的升级步骤工作流 步骤 1:准备升级 Oracle 数据库 熟悉 Oracle 数据库新版本的特性. 确定新版本的升级路径. 选择升级方 ...

  3. Feign熔断

    在Feign中使用 @EnableFeignClients中已经默认打开了断路器功能,所以这里的启动类上不需要再加@EnableCircuitBreaker注解 只需要在@FeignClient中为f ...

  4. 初探AOP

    1.背景介绍 1.什么是AOP 1)在OOP(面向对象编程)中,正是这种分散在各处且与对象核心功能无关的代码(横切代码)的存在,使得模块复用难度增加.  2)AOP则将封装好的对象剖开,找出其中对多个 ...

  5. Leetcode本地阅读器开发--01界面设计三

    这篇文章主要写一下怎样实现定类别查找. 1 void Widget::on_comboBox_currentIndexChanged(int index) 2 { 3 QString sortname ...

  6. 学习&资源分享

    零 方法 1 学校图书馆官网(注意查看学校购买的数据库以及校外访问方法) 2 各省市图书馆官网(注册各地图书馆账号,注册方法见视频01:28)   一 论文 1 知网(图书馆进入) 2 Web of ...

  7. Flutter在iOS中一些点

    1. ios对Flutter有如下依赖 Flutter.framework:     Flutter engine等: APP.framework:业务代码, 由dart代码生成.App.framew ...

  8. sourceTree工具使用方法

    https://www.cnblogs.com/tian-xie/p/6264104.html

  9. C# DataTable.Select()根据条件筛选数据

    1.前言: 很多时候我们获取到一个表的时候需要根据表的包含的队列去筛选内容,一般来说可能想到的就是遍历整个表的内容进行条件筛选,但是这种方式增加了代码量且易出错,DataTable.Select()就 ...

  10. vscode php 方法无法跳转问题

    安装扩展 PHP IntelliSense #路径感知 PHP Intelephense  #自动补全 PHP DocBlocker #在类或属性.方法上面敲/**回车自动生成参数注释等 PHP Na ...