在WEBfrom时代 membership作为系统默认的身份验证提供程序,貌似很好用,但ASP.NET没有开源,我们又不能百分之百的按照微软默认商务方式去进行验证,有无力去彻底重写这个东西,所以membership一直是个鸡肋,但随着ASP.NETmvc的开源,这个东西真的派上了用场,而且比以前更加的强大

在应该用程序中,身份验证和各种各样的验证一直都是系统一个很重要的东西,在ASP.NETmvc中这些被整体打包成为过滤器,感觉其创意来源于IIS的管道模型

主要有一下这几个东西

FilterAttribute,ActionFilterAttribute,AuthorizeAttribute                 可以继承重写

IActionFilter, IResultFilter, IExceptionFilter, IAuthorizationFilter    接口可以定义自己的实现

网上有个不错的关系图

刚一开始,我一直纳闷为什们系统自己的FILTER可以传参数

而卧自己继承重写和自己实现的咋就是不能传参了,这个时候终于感受到开源的伟大,看了一些源码终于知道怎么搞了

就是在类中定义公开的属性例如下面的实现的接口

例如 继承重写

  public class MyActionFilter:ActionFilterAttribute{public override void OnActionExecuted(ActionExecutedContext filterContext){filterContext.RequestContext.HttpContext.Response.Write(string.Format("1执行"));base.OnActionExecuted(filterContext);}public override void OnActionExecuting(ActionExecutingContext filterContext){filterContext.RequestContext.HttpContext.Response.Write(string.Format("2执行"));base.OnActionExecuting(filterContext);}public override void OnResultExecuted(ResultExecutedContext filterContext){filterContext.RequestContext.HttpContext.Response.Write(string.Format("3执行"));base.OnResultExecuted(filterContext);}public override void OnResultExecuting(ResultExecutingContext filterContext){filterContext.RequestContext.HttpContext.Response.Write(string.Format("4执行"));base.OnResultExecuting(filterContext);}}public class MyAuthorization : AuthorizeAttribute{protected override bool AuthorizeCore(HttpContextBase httpContext){return base.AuthorizeCore(httpContext);}protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext){base.HandleUnauthorizedRequest(filterContext);}public override void OnAuthorization(AuthorizationContext filterContext){base.OnAuthorization(filterContext);}protected override HttpValidationStatus OnCacheAuthorization(HttpContextBase httpContext){return base.OnCacheAuthorization(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 ?? String.Empty;}set{_roles = value;// _rolesSplit = SplitString(value);}}public string Users{get{return _users ?? String.Empty;}set{_users = value;// _usersSplit = SplitString(value);}}#region IActionFilter 成员public void OnActionExecuted(ActionExecutedContext filterContext){filterContext.RequestContext.HttpContext.Response.Write(string.Format("Action({0})已经执行了!<br />",filterContext.ActionDescriptor.ActionName));}public void OnActionExecuting(ActionExecutingContext filterContext){filterContext.RequestContext.HttpContext.Response.Write(string.Format("Action({0})执行之前!<br />",filterContext.ActionDescriptor.ActionName));}#endregion#region IResultFilter 成员public void OnResultExecuted(ResultExecutedContext filterContext){filterContext.RequestContext.HttpContext.Response.Write("Result已经执行了!");}public void OnResultExecuting(ResultExecutingContext filterContext){filterContext.RequestContext.HttpContext.Response.Write("Result执行之前!");}#endregion#region IExceptionFilter 成员public void OnException(ExceptionContext filterContext){string controller = filterContext.RouteData.Values["controller"] as string;string action = filterContext.RouteData.Values["action"] as string;filterContext.RequestContext.HttpContext.Response.Write(string.Format("{0}:{1}发生异常!{2}",controller,action, filterContext.Exception.Message));filterContext.ExceptionHandled = true;}#endregion#region IAuthorizationFilter 成员public void OnAuthorization(AuthorizationContext filterContext){filterContext.HttpContext.Response.Write("执行authorization! 判断时候有权限。。。。<br />");}#endregion}

ASP.NET mvc 自定义验证和Filter过滤器传参相关推荐

  1. ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)

    在本节中,您将验证电影控制器生成的编辑方法(Edit action methods)和视图.但是首先将修改点代码,使得发布日期属性(ReleaseDate)看上去更好.打开Models \ Movie ...

  2. ASP.NET MVC 2 验证

    来源:http://www.cnblogs.com/jhxk/articles/2612885.html  只为把自己觉的好的存起来 对用户输入的验证以及强制业务规则/逻辑是大多数web应用的核心需求 ...

  3. Asp.Net MVC 身份验证-Forms

    Asp.Net MVC 身份验证-Forms 在MVC中对于需要登录才可以访问的页面,只需要在对应的Controller或Action上添加特性[Authorize]就可以限制非登录用户访问该页面.那 ...

  4. ASP.NET MVC 自定义路由中几个需要注意的小细节

    本文主要记录在ASP.NET MVC自定义路由时,一个需要注意的参数设置小细节. 举例来说,就是在访问 http://localhost/Home/About/arg1/arg2/arg3 这样的自定 ...

  5. 艾伟_转载:ASP.NET MVC数据验证

    关于ASP.NET MVC的验证,用起来很特别,因为MS的封装,使人理解起来很费解.也可能很多人都在Scott Guthrie等人写的一本<ASP.NET MVC 1.0>书中,见过Ner ...

  6. ASP.NET MVC数据验证(上)

    关于ASP.NET MVC的验证,用起来很特别,因为MS的封装,使人理解起来很费解.也可能很多人都在Scott Guthrie等人写的一本<ASP.NET MVC 1.0>书中,见过Ner ...

  7. asp.net mvc 自定义 pager 封装与优化

    asp.net mvc 自定义 pager 封装与优化 Intro 之前做了一个通用的分页组件,但是有些不足,从翻页事件和分页样式都融合在后台代码中,到翻页事件可以自定义,再到翻页和样式都和代码分离, ...

  8. Spring MVC自定义验证注释

    在上一教程中,我展示了如何使用注释来验证表单 . 这对于简单的验证非常有用,但是最终,您需要验证一些现成的注释中没有的自定义规则. 例如,如果您需要根据输入的出生日期来验证用户已超过21岁,或者可能需 ...

  9. ASP.NET MVC 自定义Razor视图WorkContext

    概述 1.在ASP.NET MVC项目开发的过程中,我们经常需要在cshtml的视图层输出一些公用信息 比如:页面Title.服务器日期时间.页面关键字.关键字描述.系统版本号.资源版本号等 2.普通 ...

最新文章

  1. Kafka设计解析(二):Kafka High Availability (上)-转
  2. android推送接口,推送API
  3. python中统计计数的几种方法和Counter的介绍
  4. thumbnailator压缩图片并存至Excel单元格代码
  5. Hypersonic SQL开源数据库方向比较流行的纯Java开发的关系型数据库
  6. Android开发之代码开发部分字符串变色
  7. [C++STL]list容器用法介绍
  8. cnn图像二分类 python_人工智能Keras图像分类器(CNN卷积神经网络的图片识别篇)...
  9. 关于接地:数字地、模拟地、信号地、交流地、直流地、屏蔽地、浮
  10. 【Java】浅谈Java的I/O体系
  11. CanFestival字典生成
  12. python-copy模块-待优化的功能
  13. Jenkins+Spring Boot构建部署
  14. “移动办事之城”杭州:超8成个人办理事项凭身份证通办
  15. 单片机软件反破解 Hex反破解 破解后的hex不能量产
  16. tp5.0 百度编辑器上传图片到阿里云oss
  17. MATLAB最小矩形法边界法,最小外接矩形法.PPT
  18. 海康威视算法实习面试——我的第一次面试经历
  19. 马王堆汉墓帛书‧老子乙本——德经
  20. 从数据结构的角度来看Mysql为什么使用B+树

热门文章

  1. android中DatePicker和TimePicker的使用
  2. 诺基亚没放弃 它买下这家公司,要成为电信界的扛把子
  3. 苹果回应 XcodeGhost:暂未发现个人信息受影响
  4. (二)企业部分之lnmp环境的搭建:mysql源码安装
  5. sql server优化策略
  6. GdiPlus[59]: 图像(十一) IGPImageAttributes 之颜色矩阵(TGPColorMatrix)变换
  7. multiprocessing 多进程
  8. 第二课 --- git的(管理修改和撤销修改、删除文件)
  9. 基于GUI的mcc编译和dll生成
  10. ajax跨域问题解决方案