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校验用的事实上也是特性的相关实现。许多关于我们需要进一步探讨的特性等知识。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
Attribute(两)——定义自己的特色+Asp.net MVC中间filter详细解释的更多相关文章
- 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) C#中缓存的使用 C#操作redis WPF 控件库——可拖动选项卡的TabControl 【Bootstrap系列】详解Bootstrap-table AutoFac event 和delegate的分别 常见的异步方式async 和 await C# Task用法 c#源码的执行过程
反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) 背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮 ...
- Asp.net mvc自定义Filter简单使用
自定义Filter的基本思路是继承基类ActionFilterAttribute,并根据实际需要重写OnActionExecuting,OnActionExecuted,OnResultExecuti ...
- ASP.NET没有魔法——ASP.NET MVC 过滤器(Filter)
上一篇文章介绍了使用Authorize特性实现了ASP.NET MVC中针对Controller或者Action的授权功能,实际上这个特性是MVC功能的一部分,被称为过滤器(Filter),它是一种面 ...
- ASP.NET MVC 过滤器Filter
在Asp.netMvc中当你有以下及类似以下需求时你可以使用Filter功能 判断登录与否或用户权限 决策输出缓存 防盗链 防蜘蛛 本地化与国际化设置 实现动态Action Filter是一种声明式编 ...
- ASP.NET里的Session详细解释
Session模型简介 Session是什么呢?简单来说就是服务器给客户端的一个编号.当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站.当每个用户首次与这台WWW服务器建立连 ...
- ASP.NET配置文件Web.config 详细解释
一.认识Web.config文件 Web.config文件是一个XML文本文件,它用来储存 ASP.NET Web 应用程序的配置信息(如最常用的设置ASP.NET Web 应用程序的身份验证方式), ...
- 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑)
背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮币”.为了增加趣味性,帮帮币“掉落”之后所有用户都可以“捡取”,谁先捡到 ...
- Asp.net MVC使用Filter解除Session, Cookie等依赖
本文,介绍了Filter在MVC请求的生命周期中的作用和角色,以及Filter的一些常用应用场景. 同时针对MVC中的对于Session,Cookie等的依赖,如何使用Filter解依赖. 如果大家有 ...
- [转]Asp.net MVC使用Filter解除Session, Cookie等依赖
本文转自:http://www.cnblogs.com/JustRun1983/p/3279139.html 本文,介绍了Filter在MVC请求的生命周期中的作用和角色,以及Filter的一些常用应 ...
随机推荐
- hdu4679(树形dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4679 题意:给一棵树,每条边上都有一个权值,去掉树上任意一条边之后,分成两个子树,两个子树的最长路与这 ...
- DotNet基础
DotNet基础 URL特殊字符转义 摘要: URL中一些字符的特殊含义,基本编码规则如下: 1.空格换成加号(+) 2.正斜杠(/)分隔目录和子目录 3.问号(?)分隔URL和查询 4.百分号(%) ...
- 在android创建bitmap避免低记忆法
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="ht ...
- linux下无ifconfig命令
你不是用root用户运行此命令的吧?这样试试看:$ su - password: 输入root用户口令# ifconfig 还是没有的 用whereis命令找找看:# whereis ifco ...
- Python3.2官方文档-日志和弱引用
8.5 日志 Logging模块提供了一些功能全面和灵活的日志系统.最简单的形式就是把日志信息发送到一个文件或sys.stderr; import logging logging.debug('Deb ...
- Xamarin Studio Android 配置
原文:Xamarin Studio Android 配置 C#依托于mono平台可以实现Unix平台服务器端开发已经不是什么新鲜事了,而Xarmain公司(初始成员大多来自原Mono.MonoTouc ...
- [HTML5游戏开发]简单的《找没有同汉字版〗爆去考考您狄综力吧
[color=ize:18px]一,筹办工做 本次 游戏开发需求用到lufylegend.js开源游戏引擎,版本我用的是1.5.2(如今最新的版本是1.6.0). 引擎下载的位置:http: ...
- bellman_ford算法
给定一个源点,求最短路径,那么存在以源点为根的最短路径树因为最短路径具有最优子结构的性质,所以我们可以先求出树的第一层,然后再求出树的第二层,以此类推bellman_ford算法就是按照这种思想求最短 ...
- 【Python项目】配合爱漫画爬取漫画脚本而设计的GUI漫画阅读器 (一)
博客园的第一个坑,想想都有点小激动 =3= 首先是那个爬虫的地址: [原创]最近写的一个比较hack的小爬虫 选择工具: 以前用过Qt,那么选pyqt4也就是情理之中了. 明确需求: 0.首先,要读取 ...
- js多个物体运动的问题1
问题2 http://www.cnblogs.com/huaci/p/3854304.html 用js写一个物体的运动很简单.如果一个页面有多个物体在运动,它会不会出问题呢? ok,我们来看一个示例 ...