在项目中很多地方需要用到面向切面的思想,比如说身份验证、日志功能这些。

过滤器可以理解为在执行某个功能时,额外执行的一段代码,在MVC中有Action和result过滤器,

分别都是在执行前和执行后进行过滤的,具体代码如下:

public class MyActionFilterAttribute:ActionFilterAttribute{public string Name { get; set; }public override void OnActionExecuting(ActionExecutingContext filterContext){base.OnActionExecuting(filterContext);HttpContext.Current.Response.Write("<p>Action 开始执行" + Name + "</p>");}public override void OnActionExecuted(ActionExecutedContext filterContext){base.OnActionExecuted(filterContext);HttpContext.Current.Response.Write("<p>Action 执行完成" + Name + "</p>");}public override void OnResultExecuting(ResultExecutingContext filterContext){base.OnResultExecuting(filterContext);HttpContext.Current.Response.Write("<p>Result 开始执行" + Name + "</p>");}public override void OnResultExecuted(ResultExecutedContext filterContext){base.OnResultExecuted(filterContext);HttpContext.Current.Response.Write("<p>Result 执行完成" + Name + "</p>");}}

    [MyActionFilter(Name="ActionFilterTest")]public ActionResult ActionFilterTest(){throw new Exception("demo");return Content("页面加载完成");}

其中注意,过滤器特性的位置还可以放到controller的上面,代表这个控制器下所有的Action方法都执行这个过滤器,也可以放到Global.asax文件中,代表整个项目都执行这个过滤器。

过滤器是有执行优先级的,最靠近Action的过滤器才会执行。

那么如果想一个Action执行多个过滤器,就需要再添加一个新的特性。

[AttributeUsage(AttributeTargets.All,AllowMultiple=true)]
public class HomeController : Controller

其中AllowMultiple=true属性是允许多个特性一起执行,执行的时候顺序会是先global中的过滤器,以此类推,最后正着进去,反着出来。

异常过滤器

异常过滤器:当项目中出现异常时,就会自动执行异常过滤器中的代码。先添加一个类。

public class MyExceptonFilterAttribute:HandleErrorAttribute{public override void OnException(ExceptionContext filterContext){base.OnException(filterContext);HttpContext.Current.Response.Redirect("/Home/Index");}}

然后在global页面中添加异常的过滤器。

 public static void RegisterGlobalFilters(GlobalFilterCollection filters){// filters.Add(new HandleErrorAttribute());  //换自己的filters.Add(new MyExceptonFilterAttribute());}

这里做的是跳转至错误页面,其实应该记录日志文件,思路大概是使用线程访问文件,然后记录,但是以后用户会非常多,

所以就需要考虑到多线程操作这个文件,用线程锁的方式记录,但是这样会很影响性能。

所以应该考虑使用使用内存列队来提高性能 Redis,日志信息直接放进内存中,然后在用一个线程读取并写入日志文件,这样就不会让用户等待。

在项目中,一般使用log4net组件,进行记录日志。

总结:过滤器大概的流程为继承ActionFilterAttribute和HandleErrorAttribute类,然后重写里面的方法。

最后为需要过滤的Action加上特性就可以了。

    

转载于:https://www.cnblogs.com/y8932809/p/4408899.html

MVC3学习 八 Action和result过滤器及日志处理相关推荐

  1. React学习:生命周期、过滤器、event、axios-学习笔记

    文章目录 React学习:生命周期.过滤器.event.axios-学习笔记 生命周期 过滤器 webapp小例子: event - 和原生JavaScript写法一样的 axios React学习: ...

  2. 【web开发学习笔记】Structs2 Result学习笔记(三)带參数的结果集

    Result学习笔记(三)带參数的结果集 第一部分:代码 //前端 <head> <meta http-equiv="Content-Type" content= ...

  3. JMS学习八(ActiveMQ消息持久化)

    JMS学习八(ActiveMQ消息持久化) ActiveMQ的消息持久化机制有JDBC,AMQ,KahaDB和LevelDB,还有一种内存存储的方式,由于内存不属于持久化范畴,而且如果使用内存队列,可 ...

  4. Struts2框架学习(二) Action

    Struts2框架学习(二) Action Struts2框架中的Action类是一个单独的javabean对象.不像Struts1中还要去继承HttpServlet,耦合度减小了. 1,流程 拦截器 ...

  5. Asp.Net MVC学习总结(三)——过滤器你怎么看?

    一.过滤器简介 1.1.理解什么是过滤器 1.过滤器(Filters)就是向请求处理管道中注入额外的逻辑.提供了一个简单而优雅的方式来实现横切关注点. 2.所谓的过滤器(Filters),MVC框架里 ...

  6. Could not find action or result

    2019独角兽企业重金招聘Python工程师标准>>> 一个很怪的问题. 控制台异常: [org.apache.struts2.dispatcher.Dispatcher]-[WAR ...

  7. No result for action XX.action and result error 错误处理

    今天终于把困扰我两天的bug处理掉了. bug表现:通过ajax请求数据以及显示数据,数据无显示.通过ajax的error方法打印错误信息 (error: function(XMLResponse){ ...

  8. 方差 标准差_方差与标准差——杭州市初中数学核心组寒假微课学习八年级第38课...

    国家正值非常时期,开学已经推迟,为响应"在推迟开学时段,指导各地各校充分利用'互联网+'的模式共享优质教育资源,开展远程教育教学活动和学生课业辅导,努力实现我市广大中小学校学'停课不停学', ...

  9. MVC3 学习总结一(未发布)

    MVC3 学习总结一(未发布) MVC:  Model,View,Control 设置View中的数据 1. 返回model,View中强类型化 Control: public ActionResul ...

最新文章

  1. Unity 游戏开发技巧集锦之创建自发光材质
  2. 验证 Swarm 数据持久性 - 每天5分钟玩转 Docker 容器技术(104)
  3. Arcgis for Javascript实现两个地图的联动
  4. 自我引用(Self reference)
  5. vba put 语名 delphi 用什么语句_将VBA数组写入工作表时转置(Transpose)的利用
  6. 18-09-16如何从pychram的第三方包导入设计器
  7. select超过固定条数后出现滚动条_12万公里的路虎维修,两个小小的胶套损坏,导致两条后轮胎偏磨!...
  8. Jquery学习----选择器
  9. Qt Designer位置
  10. 20本父母必读的亲子教育书籍
  11. 华为教父任正非的别样视野(转)
  12. Android 自定义锁屏(带页面切换)
  13. win10 常用命令
  14. CSS(3) Background(背景)
  15. 2022-06-06 FUSE用户态文件系统
  16. 基于webrtc技术的远程桌面控制系统(一)
  17. 开源顺顺表格excel电子表格控件免费下载
  18. 数学之美—泰勒展开式
  19. 细数最暖心的地铁营销事件,你最喜欢哪一个?
  20. 毫米波雷达在无人机避障系统中的应用

热门文章

  1. 二十六、PHP框架Laravel学习笔记——模型的一对多关联
  2. 十九、PHP框架Laravel学习笔记——批量赋值和软删除
  3. nodejs 创建一个静态资源服务器 +路由
  4. 十九、MySQL常用命令总结
  5. Chapter7-4_來自獵人暗黑大陸的模型 GPT-3
  6. LeetCode 1799. N 次操作后的最大分数和(回溯 / 状态压缩DP)
  7. LeetCode 1131. 绝对值表达式的最大值(数学 绝对值展开)
  8. springboot listener_Springboot 监听redis key的过期事件
  9. [转]asp.net导出数据到Excel的三种方法
  10. 全面系统地总结Linux的基本操作(下)