Attribute(两)——定义自己的特色+Asp.net MVC中间filter详细解释

简介:

部分博客是预先定义的有关特性的一些基本特征,同时还Attribute这一概念的一个宏观上的认识,在上篇博客结尾介绍了有关为自己定义特性服务的AttributeUsage,这篇博客主要是通过filter的使用间接的了解自己定义特性的详细应用。

一、filter简单介绍

         在了解自己定义特性前,先引入一个概念filter。它是MVC中自带的一种功能,在我们项目中一般会遇到在Action运行前或结束时。去运行日志记录或错误处理等功能。通常可使用AOP截取来实现。可是在MVC中提供了filter过滤,大慷慨便了开发者。

 

MVC中的filter类型:


二、应用

声明一个自己定义特性。继承自ActionFilterAttribute

详细代码:

	//[AttributeUsage (AttributeTargets.All ,AllowMultiple =true)]//allmultiple容很多个标签同一时候起作用
	    public class MyActionfilter:ActionFilterAttribute 
	    {
	       public  string Name { set; get; }
	     
	        //action运行之前先运行此方法
	        public override void OnActionExecuting(ActionExecutingContext filterContext)
	        {
	            base.OnActionExecuting(filterContext);
	            HttpContext.Current.Response.Write("<br />OnOnActionExecuting:" + Name);
	        }
	
			 //action运行之后先运行此方法
	        public override void OnActionExecuted(ActionExecutedContext filterContext)
	        {
	            base.OnActionExecuted(filterContext);
	            HttpContext.Current.Response.Write("<br />onActionExecuted:" + Name);
	        }
	        //actionresult运行之前运行此方法
	        public override void OnResultExecuting(ResultExecutingContext filterContext)
	        {
	            base.OnResultExecuting(filterContext);
	            HttpContext.Current.Response.Write("<br />OnResultExecuting:" + Name);
	
	        }
	
			 //actionresult运行之后运行此方法
	        public override void OnResultExecuted(ResultExecutedContext filterContext)
	        {
	            base.OnResultExecuted(filterContext);
	            HttpContext.Current.Response.Write("<br />OnResultExecuted:" + Name);
	
	        }
	    }

Controller:

 [MyActionfilter(Name="IndexAction")]

        public ActionResult Index()

        {

           Response.Write("<p>action被运行完了</p>");

            return Content("<br/>ok:视图被渲染了!<br/>");

        }

运行上述代码结果:


三、filter优先级别

如上所述。controller中的仅仅有Index方法中有自己定义特性。假设想让全部的Action在运行时,都进行过滤,那么我们能够在Controller上加入自己定义filter特性标签,这样运行它的范围就是整个Controller

 

而假设我们想要在全部的Controller中的全部Action中均运行此方法呢?我们能够在App_Start中的filterConfig中对自己定义的过滤器进行注冊

Filters.Add(newMyActionFilterAttribute(){Name="Global"});//全局过滤

 

 

那么这种话就产生了优先级问题,离自己近期的优先级别最高,方法级别>Controller级别>全局级别

 

那么假设我想让全部级别的方法均生效,就是每一个级别的特性方法都去运行一遍,那么又该如何呢?这里就用到了AttributeUsage这个类了

将上面注掉的解开

//[AttributeUsage (AttributeTargets.All ,AllowMultiple =true)]//allmultiple容很多个标签同一时候起作用

AllowMultiple这个属性的值设为true。此时便会运行全部声明的特性方法了。

 

总结:通过以上对filter的使用。应该对自己定义特性有了一个初步的了解,同一时候在项目中UI中用到的自己定义特性,通过反射来解析。同一时候在处理异常时,我们能够利用异常特性HandleErrorAttribute来对程序中出现的异常进行处理。微软默认在全局过滤器中加上了处理异常过滤,可是我们也能够加上自己的异常过滤。再者,MVC中自带的前端UI校验用的事实上也是特性的相关实现。许多关于我们需要进一步探讨的特性等知识。


版权声明:本文博客原创文章,博客,未经同意,不得转载。








本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4733573.html,如需转载请自行联系原作者


相关文章
|
9月前
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
210 5
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
192 7
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
209 0
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
159 0
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
275 0
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
371 0
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
253 0
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
203 0
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
330 0
|
SQL 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
357 0