MVC-AOP思想-Filter 三种注册方式
在ASP.NET MVC框架中,为我们提供了四种类型的Filter类型包括:IAuthorizationFilter、IActionFilter、IResultFilter、IExceptionFilter,执行顺序如下:
IAuthorizationFilter 最先执行的,在这些Filter中,我们可以说它的执行优先级是最高的,用于身份验证并对控 制器中的action进行授等进行逻辑处理
IActionFilter 在IAuthorizationFilter之后执行,包含两个方法,在controller中的action执行之前、执行之后 进行逻辑处理
IResultFilter 同样包含两个方法,在IActionFilter之后执行,在返回View之前和返回View之后执行逻辑处理
IException 主要用于对异常信息进行处理
首先看下IAuthorizationFilter身份验证,且优先级最高,这里我们override它唯一的OnAuthorization():
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute),true))
{
return; //方法上面有这个特性,通过检查
}
else if(filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute),true))
{
return; //控制器上面有特性也可以通过检查
}
//filterContext.HttpContext.Session[""];
//filterContext.HttpContext.Request.Cookies
if (filterContext.HttpContext.Request.QueryString["Account"]!=null && filterContext.HttpContext.Request.QueryString["Account"].Equals("Admin")&& filterContext.HttpContext.Request.QueryString["PWD"].Equals("")&& filterContext.HttpContext.Request.QueryString["PWD"]!=null) //模拟检测,实际检测session和cookie
{
return; //这里身份验证只是模拟,实际中肯定不会这么shit
}
else
{
filterContext.HttpContext.Session["URL"] = filterContext.HttpContext.Request.RawUrl; //当前地址记录给session,登陆后返回当前页面
filterContext.Result = new RedirectResult("~/Home/Contact");
}
//base.OnAuthorization(filterContext);
}
然后呢,重载完了之后怎么使用呢,上马:
namespace MVC.Controllers
{
[CustomAuthorite] //一:在类上注册,整个类都会调用检查
public class HomeController : Controller
{
/// <summary>
/// 用户登录后才可以访问
/// </summary>
/// <returns></returns>
//[Authorize]
public ActionResult Index()
{ return View();
}
[CustomAuthorite] //二:权限特性,检测权限登录,在方法上注册,只对单个方法有效
public ActionResult About()
{
ViewBag.Message = "Your application description page."; return View();
}
public ActionResult Regex(int year,int month,int day) {
return View();
}
[AllowAnonymous] // 跳过检查
public ActionResult Contact()
{
ViewBag.Message = "Your contact page."; return View();
}
}
}
还有第三种注册方式:

可以看出以Filter形式给出的,说明它有能力以特性的形式‘贴’在控制器Controller或Action上,让代码更为‘优美’!因为Filter微软也给我们留了‘FilterConfig’入口,可以全局性的‘注入’
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new CustomAuthorite()); //全局注册登录验证Filter
}
可以看出MVC中的AOP思想较传统的webform还是方便了很多的,各司其职,使用起来也更加方便,使得业务逻辑不受框架的干扰,而且扩展起来也很方便,身份验证,异常处理等一些公用的逻辑和业务逻辑机本上完全分离. 用户登录->异常处理->日志处理->缓存处理
MVC-AOP思想-Filter 三种注册方式的更多相关文章
- MVC-AOP(面向切面编程)思想-Filter 三种注册方式
在ASP.NET MVC框架中,为我们提供了四种类型的Filter类型包括:IAuthorizationFilter.IActionFilter.IResultFilter.IExceptionFil ...
- 【mvrp多协议vlan注册协议给予三种注册方式的验证】
MVRP 多vlan注册协议给予三种注册模式的配置 一:根据项目需求搭建好拓扑图如下 二:配置: 首先对项目做理论分析,sw1,sw2,sw3所组成的直连网络中,为使不同的PC之间进行通信,按vlan ...
- 2019年6月14日 Web框架之Django_07 进阶操作(MTV与MVC、多对多表三种创建方式、前后端传输数据编码格式contentType、ajax、自定义分页器)
摘要 MTV与MVC 多对多表三种创建方式 ajax ,前后端传输数据编码格式contentType 批量插入数据和自定义分页器 一.MVC与MTV MVC(Model View Controller ...
- Django多对多表的三种创建方式,MTV与MVC概念
MTV与MVC MTV模型(django): M:模型层(models.py) T:templates V:views MVC模型: M:模型层(models.py) V:视图层(views.py) ...
- ORM中choices参数(重要)、MTV于MVC模型、多对多关系三种创建方式
choices参数(重要) **使用方式
- jquery 绑定,mvc和webform的三种方式
asp.net里的绑定方式,on的绑定方式无效 $('#SelCommandType').bind('click', function () { }); mvc里的绑定方式 $('#DownList' ...
- Android中BroadcastReceiver的两种注册方式(静态和动态)详解
今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...
- Spring boot 集成三种拦截方式
三种拦截方式分别为: javax.servlet.Filter org.springframework.web.servlet.HandlerInterceptor org.aspectj.lang. ...
- Django-多对多关系的三种创建方式-forms组件使用-cookie与session-08
目录 表模型类多对多关系的三种创建方式 django forms 组件 登录功能手写推理过程 整段代码可以放过来 forms 组件使用 forms 后端定义规则并校验结果 forms 前端渲染标签组件 ...
随机推荐
- IDEA中运行KafkaWordCount程序
1,从spark的example中找到KafkaWordCount.scala文件复制到idea编辑器中,引入包: 2,编辑configuration, (1)KafkaWordCountPr ...
- 通过freemarker生成一个word,解决生成的word用wps打开有问题的问题,解决出word时中文文件名乱码问题,解决打开出word时打开的word出现问题的问题,出图片,解决动态列表
通过freemarker制作word比较简单 步骤:制作word模板.制作方式是:将模板word保存成为xml----在xml的word模板中添加相应的标记----将xml的word文件的后缀名 ...
- 【Android 系统开发】 Android 系统启动流程简介
作者 : 万境绝尘 (octopus_truth@163.com) 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/3889548 ...
- 【面试必备】Swift 面试题及其答案
原文:Swift Interview Questions and Answers 原作者:Antonio Bello 原作者介绍: Antonio 拥有丰富的编程经验.他开始编程的时候,内存单位还是 ...
- SpriteBuilder中节点位置类型为百分比时不能定位的解决
Ball.ccb类型是Node,其中有个子节点为Color Node,其中物理使能. MainScene.ccb中加入一个物理节点,将Ball.ccb拖入其中,成为该物理节点的孩子,这时出现了一个&q ...
- 浅析GDAL库C#版本支持中文路径问题(续)
上篇博客中主要说了GDAL库C#版本中存在的问题,其表现形式主要是:"文件名中的汉字个数是偶数,完全没有影响,读取和创建都正常,如果文件名中的汉字个数是奇数,读取和创建都会报错." ...
- SpriteBuilder中粒子发射器的reset on visibility toggle选项解释
如果选中该选择框,表示粒子发射器将删除所有已存在的粒子当它们的可见状态被代码改变的时候. 如果该选择框没有选中,则发射器将保持产生粒子但不渲染它们(意思是有但你看不到)当它们的可视状态为NO的时候. ...
- Leetcode_136_Single Number
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/42713315 Given an array of inte ...
- BASE64Decoder小解
BASE64Decoder小解 Base64 是网络上最常见的用于传输8Bit 字节代码的编码方式之一,大家可以查看RFC2045 -RFC2049 ,上面有MIME 的详细规范. Base64 要求 ...
- cocos2d-x 游戏开发之有限状态机(FSM) (一)
cocos2d-x 游戏开发之有限状态机(FSM) (一) 参考:http://blog.csdn.net/mgphuang/article/details/5845252<Cocos2d-x游 ...