.NET MVC中的过滤器
过滤器其实就是.net中的特性,在.net.35之后我们可以在类或者方法名称上面加某种特性,而在.net mvc环境下,有几个比较重要的特性,如AuthorizeAttribute
它主要有在权限验证上,有时我们习惯叫它“过滤器”,原因是它可以把不符合要求的用户过滤掉,呵呵,下面是系统中常见的用户权限过滤器的代码,供大家学习
1 namespace Web.Attributes 2 { 3 4 /// <summary> 5 /// 用户验证列举 6 /// </summary> 7 public enum AuthenticationType 8 { 9 /// <summary> 10 /// 登录 11 /// </summary> 12 Login, 13 /// <summary> 14 /// 后台登陆 15 /// </summary> 16 BackgroundLogin, 17 /// <summary> 18 /// 注册 19 /// </summary> 20 Register, 21 } 22 23 /// <summary> 24 /// 用户验证过滤器:前台 25 /// </summary> 26 public class UserAuthentication : AuthorizeAttribute 27 { 28 public AuthenticationType Authentication { get; set; } 29 /// <summary> 30 /// 构造函数 31 /// </summary> 32 public UserAuthentication() 33 : this(AuthenticationType.Login) { } 34 public UserAuthentication(AuthenticationType authentication) 35 { 36 this.Authentication = authentication; 37 } 38 /// <summary> 39 /// 执行前验证 40 /// </summary> 41 public override void OnAuthorization(AuthorizationContext filterContext) 42 { 43 44 //验证不成功的时候 45 switch (this.Authentication) 46 { 47 case AuthenticationType.Login: 48 if (!ClientHelper.Current.HasUserInfo) 49 filterContext.Result = new RedirectToRouteResult("Default", new RouteValueDictionary { { "Action", "LogOn" }, { "Controller", "Account" }, { "returnUrl", HttpContext.Current.Request.Url.ToString() } }); 50 break; 51 52 case AuthenticationType.BackgroundLogin: 53 if (string.IsNullOrEmpty(SessionAction.ReadSession("Background_Current_UserID")) || Convert.ToInt32(SessionAction.ReadSession("Background_Current_UserID")) < 0) 54 filterContext.Result = new RedirectToRouteResult("Default", new RouteValueDictionary { { "Action", "LogOn" }, { "Controller", "Account" }, { "returnUrl", HttpContext.Current.Request.Url.ToString() } }); 55 break; 56 case AuthenticationType.Register: 57 filterContext.Result = new RedirectToRouteResult("Default", new RouteValueDictionary { { "Action", "Register" }, { "Controller", "Account" } }); 58 break; 59 default: 60 filterContext.Result = new RedirectToRouteResult("Default", new RouteValueDictionary { { "Action", "Index" }, { "Controller", "Home" } }); 61 break; 62 } 63 64 } 65 } 66 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下