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

  

原文地址:https://www.cnblogs.com/xy0710/p/15670993.html