学习之-ASP.NET MVC Filter
MVC Filter 是典型的AOP应用,对MVC框架处理客户端请求注入额外的一些逻辑,如日志记录、缓存处理、异常处理和权限验证,性能检测(横切关注点),而这些逻辑通常与主要业务无关,被独立分开作为公用的部分,降低模块之间的耦合度 。
ASP.NET MVC 有四种基本过滤器
过滤器类型 |
接口 |
默认实现 |
描述 |
Authorization |
IAuthorizationFilter |
AuthorizationAttribute |
最先运行,在任何其他过滤器或动作方法之前 |
Action |
IActionFilter |
ActionFilterAttribute |
在动作方法前后运行 |
Result |
IResultFilter |
ActionResultAttribute |
在动作结果被执行前后 |
Exception |
IExceptionFilter |
HandlerErrorAttribute |
仅在过滤器、动作发生异常时 |
示例代码
Authorization:输入的名称为空则直接跳转页面
public class MyAuthorizeFliter:AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
var Name = System.Web.HttpContext.Current.Request.QueryString["name"];
var IP = System.Web.HttpContext.Current.Request.UserHostAddress; if (string.IsNullOrEmpty(Name))
{
filterContext.Result = new RedirectResult("/Index/Msg");
//filterContext.Result = new RedirectToRouteResult("Default", new RouteValueDictionary(new { controller = "Index", action = "Msg" }));
//filterContext.HttpContext.Response.Redirect("/Index/Msg", true);
//filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Index", action = "Msg" }));
}
//base.OnAuthorization(filterContext);
}
}
Action和Result:
控制器代码
[MyActionFilter]
[Route("Index/PostMethod")]
public ActionResult PostMethod()
{
var aa = Request.QueryString["name"];
Logs.WriteLine("正常执行。。。");
return View("Success");
}
过滤器
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
Logs.WriteLine("执行前。。。" + DateTime.Now.ToString());
base.OnActionExecuting(filterContext);
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
Logs.WriteLine("执行后。。。");
base.OnActionExecuted(filterContext);
}
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
Logs.WriteLine("结果前。。。");
base.OnResultExecuting(filterContext);
}
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
Logs.WriteLine("结果后。。。");
base.OnResultExecuted(filterContext);
}
运行结果:
Exception
public class MyExceptionFilter:HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
Exception ex = filterContext.Exception;
Logs.WriteLine("出错了"+ex.Message);
base.OnException(filterContext);
}
}
加入自定义过滤器
可以加在三个地方
1.一个是控制器的上方,(控制器下所有的action将注入过滤器)如下代码:
[MyExceptionFilter]
public class IndexController : Controller
{
// GET: Index
[HttpGet]
public ActionResult Home()
{
return View("Home");
}
}
2.指定action方法
[MyAuthorizeFliter]
public ActionResult PostMethod()
{
return View("Success");
}
3.全局,在App_Start下的FilterConfing添加代码,如果是WebApi则是要添加到WebApiConfig.cs
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
}
学习之-ASP.NET MVC Filter的更多相关文章
- ASP.Net MVC Filter验证用户登录
一.Filter是什么 ASP.NetMVC模式自带的过滤器Filter,是一种声明式编程方式,支持四种过滤器类型,各自是:Authorization(授权),Action(行为),Result(结果 ...
- IoC容器Autofac(5) - Autofac在Asp.net MVC Filter中的应用
Autofac结合EF在MVC中的使用,上一篇IoC容器Autofac(4) - Autofact + Asp.net MVC + EF Code First(附源码)已经介绍了.但是只是MVC中Co ...
- 学习“迷你ASP.NET MVC框架”后的小结
看蒋老师MVC的书第二个大收获可以是算是看了这个迷你ASP.NET MVC框架了,虽然它远不如真正ASP.NET MVC(下文简称“MVC”)那么复杂庞大,但在迷你版中绕来绕去也够呛的.这部分我看了几 ...
- 源码学习之ASP.NET MVC Application Using Entity Framework
源码学习的重要性,再一次让人信服. ASP.NET MVC Application Using Entity Framework Code First 做MVC已经有段时间了,但看了一些CodePle ...
- ASP.NET MVC Filter的思考
思考了一下AOP的具体实现,后来想到ASP.NET MVC过滤器其实就是AOP的一种,于是从Filter下手研究AOP. 暂时先考虑AuthorizationFilter,ActionFilter,R ...
- Asp.net Mvc (Filter及其执行顺序)
应用于Action的Filter 在Asp.netMvc中当你有以下及类似以下需求时你可以使用Filter功能判断登录与否或用户权限,决策输出缓存,防盗链,防蜘蛛,本地化设置,实现动态Actionfi ...
- ASP.NET MVC Filter
http://stackoverflow.com/questions/6940371/asp-net-mvc-request-filters http://afana.me/post/aspnet-m ...
- Asp.Net MVC Filter 实现方式和作用范围控制
MVC中的Filte 简单又优雅的实现了AOP ,在日志,权限,缓存和异常处理等方面用的比较多.但本文不是讨论Filter这些功能点,而是总结Filter实现的方式.说实现也不太准确,也就是它的呈现方 ...
- 自定义asp.net mvc Filter 过滤器
1新建一个mvc项目:如图 2.主要创建下面一些类文件 1.utility目录 放置自定义的过滤器 using System; using System.Collections.Generic; us ...
随机推荐
- 转载:vs2010 问题 >LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
原文链接:http://www.cnblogs.com/newpanderking/articles/3372969.html >LINK : fatal error LNK1123: 转换到 ...
- Linux系统C语言socket tcp套接字编程
1.套接字的地址结构: typedef uint32_t in_addr_t; //32位无符号整数,用于表示网络地址 struct in_addr{ in_addr_t s_addr; //32位 ...
- JavaScript高程--<script>标签
<script>标签 在HTML5中script主要有以下几个属性:async,defer,charset,src,type, async(可选): 关键词:异步脚本,外部文件,立即下载: ...
- akoj-1073- Let the Balloon Rise
Let the Balloon Rise Time Limit:1000MS Memory Limit:65536K Total Submit:92 Accepted:58 Description ...
- 用python语言编写网络爬虫
本文主要用到python3自带的urllib模块编写轻量级的简单爬虫.至于怎么定位一个网页中具体元素的url可自行百度火狐浏览器的firebug插件或者谷歌浏览器的自带方法. 1.访问一个网址 re= ...
- react入门之使用webpack搭配环境(一)
react入门之搭配环境(一) 如果你想直接上手开发,而跳过这些搭配环境的繁琐过程,推荐你使用官方的create-react-app命令 npm install -g create-react-app ...
- 如何两周达到150行Java程序的能力--part 1
面向对象程序先导课是体系化面向对象课程的重要组成部分,其目标是帮助那些有一定C语言基础,但对面向对象概念陌生,基本没碰过Java编程的同学.该课程设计为暑期选修课,因为没有其他课程,我们设计为现场训练 ...
- opencv 访问图像像素的三种方式
访问图像中的像素 访问图像像素有三种可行的方法方法一:指针访问指针访问访问的速度最快,Mat类可以通过ptr函数得到图像任意一行的首地址,同时,Mat类的一些属性也可以用到公有属性 rows和cols ...
- 位图索引(Bitmap Index)的故事
您如果熟悉Oracle数据库,我想您对Thomas Kyte的大名一定不会陌生.Tomas主持的asktom.oracle.com网站享誉Oracle界数十年,绝非幸致.最近在图书馆借到这位Oracl ...
- python基础笔记(一)
python解释器执行python程序的过程:python3 C:\test.py 1.启动python解释器(内存中) 2.将C:\test.py 内容从硬盘读入内存(这一步与文本编辑器是一样的) ...