MVC3学习 八 Action和result过滤器及日志处理

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

过滤器可以理解为在执行某个功能时,额外执行的一段代码,在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

万字报告做空特斯拉:马斯克在操盘一场“庞氏骗局”|硅谷封面

来源&#xff1a; 腾讯科技摘要&#xff1a;美国价值投资人俱乐部VIC日前发表文章&#xff0c;从产品需求减弱、安全性能差、资金缺口巨大、伊隆马斯克或被免职等多个角度着手进行分析&#xff0c;称目前是全力做空特斯拉&#xff08;纳斯达克证券代码&#xff1a;TSLA&#xf…

内存对齐的规则以及作用

首先由一个程序引入话题&#xff1a; 1 //环境&#xff1a;vc6 windows sp2 2 //程序13 #include <iostream>4 5 using namespace std;6 7 struct st1 8 {9 char a ;10 int b ;11 short c ;12 };13 14 struct st215 {16 short c ;17 char a ;18 …

中国AI创新者论坛成功举办!这里有一份AI教育和医疗的落地秘籍

来源&#xff1a;THU数据派3月21日&#xff0c;由网易新闻、网易有道、清华数据院共同举办的以“创新&#xff0c;无界”为主题的“中国AI创新者论坛”在清华大学罗姆楼三层报告厅成功举办。律回岁晚冰霜少&#xff0c;春到人间草木知&#xff0c;初春的北京&#xff0c;顶级人…

C语言有参函数调用时参数间数据传递问题

C语言中在发生有参函数调用时&#xff0c;实参变量与形参变量之间的数据都是单向的“值传递”方式。包括指针变量和数组名作参数的情况。 C语言要求函数的实参要有确定的值&#xff0c;在函数调用时给形参分配相应的内存单元&#xff0c;同时将实参的“值”赋&#xff08;复制&…

windows下jenkins slave 搭建

一 创建新的Slave 注意Jenkins中slave称为note。 所以下面文章中的slave和node指的是一回事。 1&#xff09;在Manage Jenkins-->Manage Nodes -->New Node下&#xff1a;输入Node Name&#xff0c;且选择Dumb Slave作为Slave的类型&#xff0c;然后OK。 2&#xff09;在…

MEMS:万物智联技术关键

来源&#xff1a;Research摘要&#xff1a;MEMS技术在汽车电子、生物医疗、智慧家庭、工业物联网、消费电子等领域都有着广阔的市场前景。随着万物互联时代的加快到来&#xff0c;MEMS传感器将迎来新的浪潮。一、MEMS 是什么1、MEMS 定义MEMS&#xff08;Microelectromechanica…

C语言 变量声明和定义的区别

变量的声明有两种情况&#xff1a; 1、一种是需要建立存储空间的。例如&#xff1a;int a 在声明的时候就已经建立了存储空间。 2、另一种是不需要建立存储空间的。 例如&#xff1a;extern int a 其中变量a是在别的文件中定义的。 前者是“定义性声明&#xff08;defining dec…

2019年25大人工智能趋势!一文看到未来

来源&#xff1a;智东西摘要&#xff1a;2019年25个AI趋势。人工智能的下一步是什么&#xff1f;上周&#xff0c;知名机构CBinsights的分析师分析各个行业&#xff0c;得到了2019年最值得关注的25个人工智能趋势。虽然人工智能正在各个行业蔓延&#xff0c;经常成为头条新闻&a…

tomcat server.xml配置详解

元素名属性解释serverport指定一个端口&#xff0c;这个端口负责监听关闭tomcat的请求shutdown指定向端口发送的命令字符串servicename指定service的名字Connector(表示客户端和service之间的连接)port指定服务器端要创建的端口号&#xff0c;并在这个断口监听来自客户端的请求…

重磅!首次发现人类大脑海马体在短时间尺度上对时间信息敏感

来源&#xff1a;brainnews编译&#xff1a;南樛木早期对啮齿动物海马体的研究提供了情景记忆中海马体表达时间信息的一般神经机制证据。对记忆编码的方式涉及到许多信息&#xff0c;科学家们已经研究了其中大部分是如何工作的。但是有一个维度仍未得到解决&#xff1a;时间。最…

2015新款 MacBook 用心的测评与试用. 最轻薄的Mac上市

2015新款 MacBook 不一样的测评与试用. 最轻薄的Mac上市了. 直击现场 《HTML开发MacOSApp教程》 http://pan.baidu.com/s/1jG1Q58M 2015年的春季的苹果特别媒体发布会上, 苹果发布了超轻薄的 MacBook 产品. 或许当你阅读本文的时候已经看过不少跑分, 性能测试文章, 为了不让…

数字图像处理——图像的几何变换

这次学习图像的几何变换&#xff0c;主要有以下内容&#xff1a;图像的平移变换图像的镜像变换图像的转置变换图像的旋转变换图像的缩放1、图像的平移变换在进行书写matlab代码之前&#xff0c;先来了解一下图像平移的理论基础。设图像的高度为H&#xff0c;宽度为W&#xff0c…

万字长文解读运营商搏击5G:一场比拼财力的三国杀

来源&#xff1a;财经无忌摘要&#xff1a;5G时代已经来临&#xff0c;5G走向商用的步伐也在逐渐加快。近日&#xff0c;腾讯科技联合优质科技媒体推出“5G局中局”系列文章&#xff0c;为你解读5G在通讯、物联网、车联网、工业联网、边缘计算、云服务等各行业的应用&#xff0…

每天看一片代码系列(三):codepen上一个音乐播放器的实现

今天我们看的是一个使用纯HTMLCSSJS实现音乐播放器的例子&#xff0c;效果还是很赞的&#xff1a; codePen地址 HTML部分 首先我们要思考一下&#xff0c;一个播放器主要包含哪些元素。首先要有播放的进度信息&#xff0c;还有播放/暂停或者上一首下一首等必要的按钮&#xff0…

OpenCV——读取摄像头并处理图像

1、读取摄像头并处理图像的代码如下&#xff1a; #include<opencv2/opencv.hpp> using namespace cv;//-----------------------------------【main()函数】-------------------------------------------- // 描述&#xff1a;控制台应用程序的入口函…

MVP

MVP是一种广泛使用的UI架构模式&#xff0c;适用于基于事件驱动的应用框架。 能够与 Model直接进行交互的仅限于 Presenter, View 只能通过 Presenter 间拉地调用 Model。 MVP分PV&#xff08;Passive View) 和 &#xff08;Supervising Controller)两种模式 SC(Supervising Co…

OpenCV——图像显示与写入

1、图像显示与写入的代码如下&#xff1a; #include<opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp>using namespace cv; using namespace std; //opencv中图像显示与写入 int main() {Mat myMat imread("小狗1.jpg", -1);if (myMat.em…

工业3D打印:一场仍处在初级阶段的技术革命

来源&#xff1a;资本实验室摘要&#xff1a;曾记否&#xff0c;几年前当我们在实体店看到3D打印机打印出的一个个小玩意时&#xff0c;那种油然而生的新鲜与神奇感&#xff1f;然而&#xff0c;短短几年&#xff0c;面对这种新事物&#xff0c;我们已经见怪不怪。此外&#xf…

OpenCV——读取视频文件并写入文件

1、代码如下&#xff1a; #include<opencv2/opencv.hpp> using namespace cv;//-----------------------------------【main()函数】-------------------------------------------- // 描述&#xff1a;控制台应用程序的入口函数&#xff0c;我们…

人工智能的现状与未来(附PPT)

来源&#xff1a;网经科技摘要&#xff1a;人工智能引领新的工业革命&#xff0c;需要正确理解其技术核心、学科定位、架构演进&#xff0c;当前深度学习和知识图谱成其左膀右臂&#xff0c;象征人类智谋的智能博弈在围棋后的下一个高地在哪里&#xff1f;走向人机融合的未来&a…