.Net Core MVC全局过滤器验证是否需要登录
1.新增全局登录过滤器LoginCheckAttribute
1 public class LoginCheckAttribute: ActionFilterAttribute
2 {
3 public override void OnActionExecuting(ActionExecutingContext filterContext)
4 {
5 // 判断是否检查登陆
6 var noNeedCheck = false;
7 string msg = filterContext.HttpContext.Request.Path;
8
9 if (filterContext.ActionDescriptor is ControllerActionDescriptor controllerActionDescriptor)
10 {
11 noNeedCheck = controllerActionDescriptor.MethodInfo.GetCustomAttributes(inherit: true)
12 .Any(a => a.GetType().Equals(typeof(NoNeedLoginAttribute)));
13 }
14 if (noNeedCheck) return;
15
16 bool isLogin = filterContext.HttpContext.Session.GetString("_Name") !=null?true:false;//你的验证是否登录方法
17 if (!isLogin)
18 {
19 filterContext.HttpContext.Response.Redirect("/Account/Login", true);//跳转登录页面
20 }
21
22 base.OnActionExecuting(filterContext);
23 }
24 }
2.新增无需登录过滤器NoNeedLoginAttribute
1 public class NoNeedLoginAttribute: ActionFilterAttribute
2 {
3 public override void OnActionExecuting(ActionExecutingContext filterContext)
4 {
5 base.OnActionExecuting(filterContext);
6
7 }
8 }
3.Startup.cs页面添加配置
1 public void ConfigureServices(IServiceCollection services)
2 {
3 //全局过滤器
4 services.AddMvc(config => config.Filters.Add(new LoginCheckAttribute()));
5 }
4.控制器中使用
1 public class AccountController : Controller
2 {
3 [NoNeedLogin]
4 public IActionResult Login()
5 {
6 return View();
7 }
8 }
PS:刚开始学习.net Core 有不对的地方,请大家帮忙指正。另外有没有直接在控制器上过滤的,有知道的朋友请在评论中帮忙解答下,谢谢!
例:
1 public class LoginCheckAttribute: ActionFilterAttribute
2 {
3 public bool IsChecked { get; set; }
4 public override void OnActionExecuting(ActionExecutingContext filterContext)
5 {
6
7 if (IsChecked)
8 {
9 bool isLogin = filterContext.HpptContext.Session.GetString("_Name")!=null? true:false;//你的验证是否登录方法
10 if (!isLogin)
11 {
12 filterContext.HttpContext.Response.Redirect("/Account/Login", false);
13 }
14 }
15
16 base.OnActionExecuting(filterContext);
17 }
18 }
19
20
21 //Startup.cs页面添加配置
22 public void ConfigureServices(IServiceCollection services)
23 {
24 //全局过滤器
25 services.AddMvc(config => config.Filters.Add(new LoginCheckAttribute(){IsChecked = true}));
26 }
27
28
29 //控制器
30 //1.该控制器不需要验证登录
31 [LoginCheck(IsChecked = false)]
32 public class AccountController : Controller
33 {
34 public IActionResult Login()
35 {
36 return View();
37 }
38 }
39
40
41 //2.该控制器需要验证是否登录
42 public class UserController : Controller
43 {
44 public IActionResult Index()
45 {
46 return View();
47 }
48 }
.Net Core MVC全局过滤器验证是否需要登录的更多相关文章
- asp.net mvc 自定义全局过滤器 验证用户是否登录
一般具有用户模块的系统都需要对用户是否登录进行验证,如果用户登录了就可以继续操作,否则退回用户的登录页面 对于这样的需求我们可以通过自定义一个独立的方法来完成验证的操作,但是这样代码的重复率就大大提高 ...
- 一、Core基于MVC的全局过滤器验证
一.Core基于MVC的过滤器验证 1.添加一个过滤器.在Startup 中ConfigureServices方法里添加一个Filters 即我们自己授权代码类. public void Config ...
- asp.net core MVC 全局过滤器之ExceptionFilter异常过滤器(一)
本系类将会讲解asp.net core MVC中的内置全局过滤器的使用,将分为以下章节 asp.net core MVC 过滤器之ExceptionFilter异常过滤器(一) asp.net cor ...
- MVC 自定义过滤器/特性来实现登录授权及验证
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 最近在做自学MVC,遇到的问题很多,索性一点点总结 ...
- .net core MVC Filters 过滤器介绍
一.过滤器的优级依次介绍如下(逐次递减): Authorization Filter -> Resource Filter -> Acton Filter -> Exception ...
- ASP.NET Core MVC 之过滤器(Filter)
ASP.NET MVC 中的过滤器允许在执行管道中的特定阶段之前或之后运行代码.可以对全局,也可以对每个控制器或每个操作配置过滤器. 1.过滤器如何工作 不同的过滤器类型在管道中的不同阶段执行,因此具 ...
- .Net Core MVC中过滤器简介
在.Net Framework MVC 中有四种过滤器,授权过滤器(Authorize).Action 过滤器.结果过滤器(Result).异常过滤器(Exception)四种过滤器.在.Net Co ...
- Mvc全局过滤器与Action排除
http://blog.csdn.net/shuaihj/article/details/53020428 如何一次性给所有action做登录验证过滤,如何排除不需要做登录验证的action? 1. ...
- mvc全局过滤器和httpmodule的执行顺序
根据http管线模型,请求先通过httpmodule,再通过httphandler,之后再进入mvc的过滤器 另外参考:MVC如何在Pipeline中接管请求的? http://www.cnblogs ...
随机推荐
- 大爽Python入门教程 0-4 安装Pycharm
大爽Python入门公开课教案 点击查看教程总目录 安装重量级IDE--Pycharm 一 下载 下面步骤1,2中网络卡顿的朋友, 请直接前往步骤3来下载. 使用搜索引擎搜索Pycharm, 打开搜索 ...
- 本机不安装Oracle客户端,使用instantclient_11_2和PLSQL Developer连接Oracle远程数据库步骤
前言:由于Orcale客户端,占用空间太大,我们选择安装installclient\PLSQL客户端对orcale进行数据库连接. 安装要求.installClient要与PLSQL的安装位数一致, ...
- Sentry 官方 JavaScript SDK 简介与调试指南
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- [atAGC020E]Encoding Subsets
令$f_{S}$表示字符串$S$的答案(所有子集的方案数之和),考虑转移: 1.最后是一个字符串,不妨仅考虑最后一个字符,即$f_{S[1,|S|)}$(字符串下标从1开始),特别的,若$S_{|S| ...
- Study Blazor .NET(一)简介
翻译自:Study Blazor .NET,转载请注明. 介绍 Blazor是一个全新的 Web UI 框架,它使用c# .Razor 和 HTML以及 WebAssembly W3C标准.它提供了用 ...
- 获取客户端Mac地址
近期有个需求,需要获取客户端Mac地址作为白名单验证的依据.使用.net,B/S架构.先百度找了一些获取mac地址的方法, using System; using System.Collections ...
- Jmeter BlazeMeter实现web录制
1. BlazeMeter安装和注册 BlazeMeter是一款与Apache JMeter兼容的chrome插件,采用BlazeMeter可以方便的进行流量录制和脚本生成,作为接口测试脚本编写的 ...
- P6585 中子衰变
我们偶数的时候只要对称操作. 奇数的话,我们定义\(1\)的相反数为\(-1\),\(0\)相反数为\(0\). 我们维护最长的两边的相反串,中间一段除了一个端点,其他均被染成同色. 那么如果对方染端 ...
- Codeforces 1236F - Alice and the Cactus(期望+分类讨论)
Codeforces 题面传送门 & 洛谷题面传送门 期望好题. 首先拆方差: \[\begin{aligned} &E((x-E(x))^2)\\ =&E(x^2)-2E(x ...
- Codeforces 1483F - Exam(AC 自动机)
Codeforces 题目传送门 & 洛谷题目传送门 一道 ACAM 的 hot tea 首先建出 ACAM.考虑枚举长串,以及短串在长串中出现的最后位置 \(j\),这个复杂度显然是 \(\ ...