部分博客是预先定义的有关特性的一些基本特征,同时还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校验用的事实上也是特性的相关实现。许多关于我们需要进一步探讨的特性等知识。

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

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

  1. 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) C#中缓存的使用 C#操作redis WPF 控件库——可拖动选项卡的TabControl 【Bootstrap系列】详解Bootstrap-table AutoFac event 和delegate的分别 常见的异步方式async 和 await C# Task用法 c#源码的执行过程

    反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑)   背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮 ...

  2. Asp.net mvc自定义Filter简单使用

    自定义Filter的基本思路是继承基类ActionFilterAttribute,并根据实际需要重写OnActionExecuting,OnActionExecuted,OnResultExecuti ...

  3. ASP.NET没有魔法——ASP.NET MVC 过滤器(Filter)

    上一篇文章介绍了使用Authorize特性实现了ASP.NET MVC中针对Controller或者Action的授权功能,实际上这个特性是MVC功能的一部分,被称为过滤器(Filter),它是一种面 ...

  4. ASP.NET MVC 过滤器Filter

    在Asp.netMvc中当你有以下及类似以下需求时你可以使用Filter功能 判断登录与否或用户权限 决策输出缓存 防盗链 防蜘蛛 本地化与国际化设置 实现动态Action Filter是一种声明式编 ...

  5. ASP.NET里的Session详细解释

    Session模型简介 Session是什么呢?简单来说就是服务器给客户端的一个编号.当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站.当每个用户首次与这台WWW服务器建立连 ...

  6. ASP.NET配置文件Web.config 详细解释

    一.认识Web.config文件 Web.config文件是一个XML文本文件,它用来储存 ASP.NET Web 应用程序的配置信息(如最常用的设置ASP.NET Web 应用程序的身份验证方式), ...

  7. 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑)

    背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮币”.为了增加趣味性,帮帮币“掉落”之后所有用户都可以“捡取”,谁先捡到 ...

  8. Asp.net MVC使用Filter解除Session, Cookie等依赖

    本文,介绍了Filter在MVC请求的生命周期中的作用和角色,以及Filter的一些常用应用场景. 同时针对MVC中的对于Session,Cookie等的依赖,如何使用Filter解依赖. 如果大家有 ...

  9. [转]Asp.net MVC使用Filter解除Session, Cookie等依赖

    本文转自:http://www.cnblogs.com/JustRun1983/p/3279139.html 本文,介绍了Filter在MVC请求的生命周期中的作用和角色,以及Filter的一些常用应 ...

随机推荐

  1. NLP 苏图南 打破自我设限 突破自我—在线播放—优酷网,视频高清在线观看

    http://v.youku.com/v_show/id_XNTAyNDg3MTky.html?x

  2. cocos2d-html5 碰撞检測的几种方法

    游戏中的碰撞还是比較多的,比方角色与角色的碰撞,角色与墙壁的碰撞,角色与怪物的碰撞等,都须要 进行碰撞的检測,来触发一定的事件 近期在尝试制作一个小游戏的时候须要用到碰撞检測,然后就查了下资料,并在论 ...

  3. codeforces 459D - Pashmak and Parmida&#39;s problem【离散化+处理+逆序对】

    题目:codeforces 459D - Pashmak and Parmida's problem 题意:给出n个数ai.然后定义f(l, r, x) 为ak = x,且l<=k<=r, ...

  4. poj2761(treap入门)

    给n个数,然后m个询问,询问任意区间的第k小的数,特别的,任意两个区间不存在包含关系, 也就是说,将所有的询问按L排序之后, 对于i<j ,   Li < Lj 且 Ri < Rj ...

  5. 数据库的group by 分组

    有一个表 查询结果为 用下面的代码写 select COUNT( case NumName when 'a' then NumName end ) as 'aaa', COUNT( case NumN ...

  6. Error: ORA-16501: the Data Guard broker operation failed ORA-16625: cannot reach database

    在备库上建配置文件 DGMGRL> create configuration 'sharkdbbork' as primary database is 'sharkdb' connect ide ...

  7. u-boot: Error: Can&#39;t overwrite &quot;ethaddr&quot;

    When try to execute following command, It reports error as following: --->8--- U-Boot> setenv ...

  8. HTML中心在页面上弹出自定义表单层(实现可能拖累)

    使用DIV窗体来动态显示内容的原理:首先採用CSS和HTML隐藏弹窗中的内容,然后利用JavaScript(本教程中是JQuery)来动态显示它们.这样的效果不仅可以充分利用有限的版面空间,并且可以提 ...

  9. Ubuntu12.04编译Android4.0.1源码全过程-----附wubi安装ubuntu编译android源码硬盘空间不够的问题解决

    昨晚在编译源码,make一段时间之后报错如下: # A fatal error has been detected by the Java Runtime Environment: # # SIGSE ...

  10. 企业邮件系统-Postfix安装使用

    Postfix是目前流行的一套邮件传输代理软件(MTA),其作者Wietst Venema最初开发这套软件时就对总体设计.扩展能力.可用性及系统安全等方面进行了充分的考虑.由于Postfix在稳定.效 ...