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