1. 程式人生 > 其它 >.Net Core MVC全域性過濾器驗證是否需要登入

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