2023年6月20日发(作者:)
⾃定义验证和Filter过滤器传参 在WEBfrom时代 membership作为系统默认的⾝份验证提供程序,貌似很好⽤,但没有开源,我们⼜不能百分之百的按照微软默认商务⽅式去进⾏验证,有⽆⼒去彻底重写这个东西,所以membership⼀直是个鸡肋,但随着的开源,这个东西真的派上了⽤场,⽽且⽐以前更加的强⼤ 在应该⽤程序中,⾝份验证和各种各样的验证⼀直都是系统⼀个很重要的东西,在中这些被整体打包成为过滤器,感觉其创意来源于IIS的管道模型
主要有⼀下这⼏个东西FilterAttribute,ActionFilterAttribute,AuthorizeAttribute 可以继承重写IActionFilter, IResultFilter, IExceptionFilter, IAuthorizationFilter 接⼝可以定义⾃⼰的实现⽹上有个不错的关系图
刚⼀开始,我⼀直纳闷为什们系统⾃⼰的FILTER可以传参数⽽卧⾃⼰继承重写和⾃⼰实现的咋就是不能传参了,这个时候终于感受到开源的伟⼤,看了⼀些源码终于知道怎么搞了就是在类中定义公开的属性例如下⾯的实现的接⼝
例如 继承重写 public class MyActionFilter:ActionFilterAttribute { public override void OnActionExecuted(ActionExecutedContext filterContext) { (("1执⾏")); onExecuted(filterContext); } public override void OnActionExecuting(ActionExecutingContext filterContext) { (("2执⾏")); onExecuting(filterContext); } public override void OnResultExecuted(ResultExecutedContext filterContext) { (("3执⾏")); ltExecuted(filterContext); } public override void OnResultExecuting(ResultExecutingContext filterContext) { (("4执⾏")); ltExecuting(filterContext); } } public class MyAuthorization : AuthorizeAttribute { protected override bool AuthorizeCore(HttpContextBase httpContext) { return izeCore(httpContext); } protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) { UnauthorizedRequest(filterContext); } public override void OnAuthorization(AuthorizationContext filterContext) { orization(filterContext); } protected override HttpValidationStatus OnCacheAuthorization(HttpContextBase httpContext) { return eAuthorization(httpContext); } }还有实现接⼝⾃定义⾃⼰的验证⽅式 public class MyFilter : FilterAttribute, IActionFilter, IResultFilter, IExceptionFilter, IAuthorizationFilter { private string _roles; private string[] _rolesSplit = new string[0]; private string _users; private string[] _usersSplit = new string[0]; //过滤器但参数就是过滤器中定义的公开的参数 public string Roles { get { return _roles ?? ; } set { _roles = value; // _rolesSplit = SplitString(value); } } public string Users { get { return _users ?? ; } set { _users = value; // _usersSplit = SplitString(value); } } #region IActionFilter 成员 public void OnActionExecuted(ActionExecutedContext filterContext) { (("Action({0})已经执⾏了!
" ,Name)); } public void OnActionExecuting(ActionExecutingContext filterContext) { (("Action({0})执⾏之前!
" ,Name)); } #endregion #region IResultFilter 成员 public void OnResultExecuted(ResultExecutedContext filterContext) { ("Result已经执⾏了!"); } public void OnResultExecuting(ResultExecutingContext filterContext) { ("Result执⾏之前!"); } #endregion #region IExceptionFilter 成员 public void OnException(ExceptionContext filterContext) { string controller = ["controller"] as string; string action = ["action"] as string; (("{0}:{1}发⽣异常!{2}", controller,action, e)); ionHandled = true; } #endregion #region IAuthorizationFilter 成员 public void OnAuthorization(AuthorizationContext filterContext) { ("执⾏authorization! 判断时候有权限。。。。
"); } #endregion
}
2023年6月20日发(作者:)
⾃定义验证和Filter过滤器传参 在WEBfrom时代 membership作为系统默认的⾝份验证提供程序,貌似很好⽤,但没有开源,我们⼜不能百分之百的按照微软默认商务⽅式去进⾏验证,有⽆⼒去彻底重写这个东西,所以membership⼀直是个鸡肋,但随着的开源,这个东西真的派上了⽤场,⽽且⽐以前更加的强⼤ 在应该⽤程序中,⾝份验证和各种各样的验证⼀直都是系统⼀个很重要的东西,在中这些被整体打包成为过滤器,感觉其创意来源于IIS的管道模型
主要有⼀下这⼏个东西FilterAttribute,ActionFilterAttribute,AuthorizeAttribute 可以继承重写IActionFilter, IResultFilter, IExceptionFilter, IAuthorizationFilter 接⼝可以定义⾃⼰的实现⽹上有个不错的关系图
刚⼀开始,我⼀直纳闷为什们系统⾃⼰的FILTER可以传参数⽽卧⾃⼰继承重写和⾃⼰实现的咋就是不能传参了,这个时候终于感受到开源的伟⼤,看了⼀些源码终于知道怎么搞了就是在类中定义公开的属性例如下⾯的实现的接⼝
例如 继承重写 public class MyActionFilter:ActionFilterAttribute { public override void OnActionExecuted(ActionExecutedContext filterContext) { (("1执⾏")); onExecuted(filterContext); } public override void OnActionExecuting(ActionExecutingContext filterContext) { (("2执⾏")); onExecuting(filterContext); } public override void OnResultExecuted(ResultExecutedContext filterContext) { (("3执⾏")); ltExecuted(filterContext); } public override void OnResultExecuting(ResultExecutingContext filterContext) { (("4执⾏")); ltExecuting(filterContext); } } public class MyAuthorization : AuthorizeAttribute { protected override bool AuthorizeCore(HttpContextBase httpContext) { return izeCore(httpContext); } protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) { UnauthorizedRequest(filterContext); } public override void OnAuthorization(AuthorizationContext filterContext) { orization(filterContext); } protected override HttpValidationStatus OnCacheAuthorization(HttpContextBase httpContext) { return eAuthorization(httpContext); } }还有实现接⼝⾃定义⾃⼰的验证⽅式 public class MyFilter : FilterAttribute, IActionFilter, IResultFilter, IExceptionFilter, IAuthorizationFilter { private string _roles; private string[] _rolesSplit = new string[0]; private string _users; private string[] _usersSplit = new string[0]; //过滤器但参数就是过滤器中定义的公开的参数 public string Roles { get { return _roles ?? ; } set { _roles = value; // _rolesSplit = SplitString(value); } } public string Users { get { return _users ?? ; } set { _users = value; // _usersSplit = SplitString(value); } } #region IActionFilter 成员 public void OnActionExecuted(ActionExecutedContext filterContext) { (("Action({0})已经执⾏了!
" ,Name)); } public void OnActionExecuting(ActionExecutingContext filterContext) { (("Action({0})执⾏之前!
" ,Name)); } #endregion #region IResultFilter 成员 public void OnResultExecuted(ResultExecutedContext filterContext) { ("Result已经执⾏了!"); } public void OnResultExecuting(ResultExecutingContext filterContext) { ("Result执⾏之前!"); } #endregion #region IExceptionFilter 成员 public void OnException(ExceptionContext filterContext) { string controller = ["controller"] as string; string action = ["action"] as string; (("{0}:{1}发⽣异常!{2}", controller,action, e)); ionHandled = true; } #endregion #region IAuthorizationFilter 成员 public void OnAuthorization(AuthorizationContext filterContext) { ("执⾏authorization! 判断时候有权限。。。。
"); } #endregion
}
发布评论