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传入到显示页面中(略),问题完成。

最新文章

  1. SQLServer复制(二)--事务代理作业
  2. JS学习之路(这个觉得写的很好,放在这里是方便查看)
  3. Emit学习(2) - IL - 值类型和引用类型(补)
  4. 20145337实验四Android开发基础
  5. MySQL中的账号与权限管理
  6. SharePoint2010主题和样式揭秘
  7. cmd 进入不同的驱动盘及上下级目录
  8. codevs 3693 数三角形
  9. effective_c++条款20,用pass-by-reference-to-const替换pass-by-value
  10. vmwvare 网卡设置讲解
  11. 手机号验证正则表达式+Demo(亲测完毕)
  12. has invalid type &lt;class &#39;numpy.ndarray&#39;&gt;, must be a string or Tensor
  13. Kruskal算法(题目还是:畅通工程)
  14. eclipse导入项目后找不到.class文件
  15. ps命令参数
  16. 解题:SDOI 2014 重建
  17. 深入浅出TCP之listen
  18. 你对position的了解到底有多少?
  19. Selinux相关
  20. 【android】实现手指滑动来切换activity(转)

热门文章

  1. File、Files、Path、Paths
  2. 2022-3-21内部群每日三题-清辉PMP
  3. vue中页面渲染完成之后获取元素的属性
  4. Doris与mysql语法对照,差异篇
  5. vue后台管理系统——用户管理模块
  6. Java基础Day4-Java方法
  7. android studio 隐式Internet跳转
  8. web后端之表单传值
  9. 三、JMeter实战-快速上手JMeter
  10. mmdetection使用现有的模型进行推理