asp.net mvc自定义特性之负责系统的统一登录验证
添加自定义的特性需要先继承ActionFilterAttribute
首先是实现源码:
C#
public class CheckLoginAttribute : ActionFilterAttribute { /// <summary> /// 负责系统的统一登录验证 /// </summary> /// <param name="filterContext"></param> public override void OnActionExecuting(ActionExecutingContext filterContext) { //判断触发此方法的本身和控制器只要有一个贴了[SkipCheckLogin]标签,则跳过登录检查 //判断action如果贴SkipCheckLoginAttribute标签,则阻断下面代码的运行 if (filterContext.ActionDescriptor.IsDefined(typeof(SkipCheckLoginAttribute), false)) { return; } //Session为空返回的登录 if (filterContext.HttpContext.Session[Keys.Uinfo] == null) { ToLogin(filterContext, "您未登录"); return; } //用户为空返回登录 sys_user userInfo = filterContext.HttpContext.Session[Keys.Uinfo] as sys_user; if(userInfo == null || userInfo.bn_id <= 0) { ToLogin(filterContext, "您未登录"); return; } // DBContext db = DapperDbContext.GetDbContext(); var userinfo = db.Find<sys_user>(c => c.bn_id == userInfo.bn_id); if (userinfo != null) { filterContext.HttpContext.Session[Keys.Uinfo] = userinfo; filterContext.HttpContext.Session.Timeout = 1440; } } /// <summary> /// 没有登录就跳转到登录 /// </summary> /// <param name="filterContext"></param> private static void ToLogin(ActionExecutingContext filterContext,string msg) { //获取当前action方法是否贴有AjaxRequest特性标签 bool isajax = filterContext.ActionDescriptor.IsDefined(typeof(AjaxRequestAttribute), false); //表示截获的action方法是作为ajax来请求的 if (isajax) { //如果ajax请求则应该返回json JsonResult json = new JsonResult(); json.JsonRequestBehavior = JsonRequestBehavior.AllowGet; json.Data = new { status = StateTypeEnum.nologin, msg = msg, loginurl = "/Login/Login" }; filterContext.Result = json; } else { //如果是浏览器请求则直接将url跳转到登录页面即可 ContentResult content = new ContentResult(); content.Content = "<script>alert('"+ msg + "');top.location.href='/Login/Login'</script>"; filterContext.Result = content; } } }
然后是它的使用方法:
C#
[CheckLogin] public class WaterManagementController : Controller { ...... }
分类:
DOTNET
标签:
asp.net mvc
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!