学习之-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 ...
随机推荐
- RabbitMQ入门-Topic模式
上篇<RabbitMQ入门-Routing直连模式>我们介绍了可以定向发送消息,并可以根据自定义规则派发消息.看起来,这个Routing模式已经算灵活的了,但是,这还不够,我们还有更加多样 ...
- Java集合框架Collections【List/Set】
1.基本介绍: 集合就是存放对象的,他比数组好的一点就是他一开始不清楚自己长度 容器一般是分为很多种的,很多的容器在一起然后进过断的抽象和抽取就成了一个体系,我们称之为集合框架 我们看体系首先是看顶层 ...
- c语言链表升级
之前的链表就是一个普通的带头的单向链表,我们不自觉的会发现这样的链表有缺陷,有关链表的删除新增查找跟链表的结构体内容耦合性太强 什么意思呢? 比如我们之前的链表的结构体 typedef struct ...
- Centos 7.3 安装mysql5.7.19 各种调试就不多说了
mysql 5.7.19linux-glibc2.12 (x86_64) 安装 1.在安装目录进行解压2.mv解压目录为mysql3.创建mysql的用户 useradd -s /sbin/nolon ...
- 基于tensorflow的‘端到端’的字符型验证码识别源码整理(github源码分享)
基于tensorflow的‘端到端’的字符型验证码识别 1 Abstract 验证码(CAPTCHA)的诞生本身是为了自动区分 自然人 和 机器人 的一套公开方法, 但是近几年的人工智能技术的发展 ...
- Vue内容分发slot
前面的话 为了让组件可以组合,需要一种方式来混合父组件的内容与子组件自己的模板.这个过程被称为 内容分发 (或 “transclusion” ).Vue实现了一个内容分发 API,参照了当前 Web ...
- 实现QObject与JavaScript通讯(基于QWebEngine + QWebChannel)
实现QObject与JavaScript通讯(基于QWebEngine + QWebChannel) 通过使用QtWebEngine加载相关页面,然后用QtWebChannel作为Qt与Javascr ...
- window响应拖拽文件操作
window响应拖拽文件操作 1.首先调用DragAcceptFiles,让控件或者窗体支持文件拖动操作函数功能:用来为拖放文件作初始化.函数原型: void DragAcceptFiles( HWN ...
- 0721JS
输入三个整数,x,y,z,最终以从小到大的方式输出 <!--<script> var x=prompt("请输入数字") var y=prompt("请 ...
- Linux学习总结(十四)—— 查看CPU信息
文章首发于[博客园-陈树义],点击跳转到原文Linux学习总结(十四)-- 查看CPU信息. Linux学习总结(十四)-- 查看CPU信息 商用服务器CPU最常用的是 Intel Xeon 系列,该 ...