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 }