.NET MVC 过滤器使用
来看以下两种情况
1. 如果我们需要对某个模块做权限控制,通常的做法是写一个基类(BaseController),让这个基类继承Controller类,在BaseController的构造方法中进行权限校验的操作,然后让需要进行校验的类继承 BaseController
2. 如果我们需要自定义错误异常处理,固然我们可以对可能出错的地方都写上 try catch ,但是这几乎不可能实现,因为很多错误我们自己也无法预知
在.net MVC中给我们提供了一种解决方案,那就是过滤器
.net framework给我们提供了四种不同类型过滤器
| 过滤器类型 | 实现接口 | 默认实现 | 重写方法 | 描述 |
| Authorization | IAuthorizationFilter | AuthorizeAttribute | OnAuthorization | 在方法和所有过滤器前执行 |
| Action | IActionFilter | ActionFilterAttribute |
OnActionExecuting OnActionExecuted |
方法执行之前和之后 |
| Result | IResultFilter | ActionFilterAttribute |
OnResultExecuted OnResultExecuting |
结果执行之前和之后 |
| Exception | IExceptionFilter | HandleErrorAttribute | OnException | 抛出异常时执行 |
过滤器两种定义方式:
1. 单独建立一个过滤器类,然后在需要使用该过滤器的方法或者类前面使用特征的方式加上该过滤器,或者使用全局注册的方式 (推荐)
权限校验:
public class MyAuthorization:AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
//RouteData 获取路由数据
List<KeyValuePair<string, object>> router_data = filterContext.RouteData.Values.ToList(); //在这里进行权限判断,如果具备权限,则跳转到错误页面
filterContext.HttpContext.Response.Write("检查权限"); //跳转到 Auth 控制器下 Login 方法
filterContext.Result = new RedirectResult("Auth/Login"); //这种跳转方法不会终止程序执行
//filterContext.HttpContext.Response.Redirect("Auth/Login") //注释掉此行代码,否则将执行系统定义的过滤器
//base.OnAuthorization(filterContext);
}
//在需要进行权限校验的方法或者类前面加上该过滤器
[MyAuthorization]
public ActionResult Index()
{
return View();
}
异常处理:
public override void OnException(ExceptionContext filterContext)
{
//日志记录,然后跳转到错误页
filterContext.Result = new RedirectResult("/error/400.html"); //这行代码不可以被删除 否则捕捉不到异常
base.OnException(filterContext);
}
然后在 App_Start/FilterConfig.cs 中全局注册
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//注释掉系统注册的全局异常处理
//filters.Add(new HandleErrorAttribute()); filters.Add(new MyException());
}
最后需要在根目录 web.config中开启自定义异常处理
//在 system.web 节点中添加 <customErrors mode="On">
</customErrors>
2. 在控制器中重写对应方法,然后改控制器下所有方法都会自动使用该控制器
protected override void OnAuthorization(AuthorizationContext filterContext)
{
filterContext.HttpContext.Response.Write("这是控制器中重写的方法");
}
.NET MVC 过滤器使用的更多相关文章
- mvc过滤器学习(1)
mvc 过滤器结构图 AuthorizeAttribute AuthorizeAttribute是IAuthorizationFilter的默认实现,添加了Authorize特性的Action将对用户 ...
- ASP.NET MVC 过滤器(一)
ASP.NET MVC 过滤器(一) 前言 前面的篇幅中,了解到了控制器的生成的过程以及在生成的过程中的各种注入点,按照常理来说篇幅应该到了讲解控制器内部的执行过程以及模型绑定.验证这些知识了.但是呢 ...
- ASP.NET MVC 过滤器(三)
ASP.NET MVC 过滤器(三) 前言 本篇讲解行为过滤器的执行过程,过滤器实现.使用方式有AOP的意思,可以通过学习了解过滤器在框架中的执行过程从而获得一些AOP方面的知识(在顺序执行的过程中, ...
- ASP.NET MVC 过滤器(四)
ASP.NET MVC 过滤器(四) 前言 前一篇对IActionFilter方法执行过滤器在框架中的执行过程做了大概的描述,本篇将会对IActionFilter类型的过滤器使用来做一些介绍. ASP ...
- ASP.NET MVC 过滤器(五)
ASP.NET MVC 过滤器(五) 前言 上篇对了行为过滤器的使用做了讲解,如果在控制器行为的执行中遇到了异常怎么办呢?没关系,还好框架给我们提供了异常过滤器,在本篇中将会对异常过滤器的使用做一个大 ...
- asp.net MVC 过滤器使用案例:统一处理异常顺道精简代码
重构的乐趣在于精简代码,模块化设计,解耦功能……而对异常处理的重构则刚好满足上述三个方面,下面是我的一点小心得. 一.相关的学习 在文章<精简自己20%的代码>中,讨论了异常的统一处理,并 ...
- MVC过滤器详解
MVC过滤器详解 APS.NET MVC中(以下简称"MVC")的每一个请求,都会分配给相应的控制器和对应的行为方法去处理,而在这些处理的前前后后如果想再加一些额外的逻辑处理. ...
- MVC过滤器使用案例:统一处理异常顺道精简代码
重构的乐趣在于精简代码,模块化设计,解耦功能……而对异常处理的重构则刚好满足上述三个方面,下面是我的一点小心得. 一.相关的学习 在文章<精简自己20%的代码>中,讨论了异常的统一处理,并 ...
- ASP.NET MVC 过滤器详解
http://www.fwqtg.net/asp-net-mvc-%E8%BF%87%E6%BB%A4%E5%99%A8%E8%AF%A6%E8%A7%A3.html 我经历了过滤器的苦难,我想到了还 ...
- ASP.NET MVC过滤器(一)
MVC过滤器是加在 Controller 或 Action 上的一种 Attribute,通过过滤器,MVC 网站在处理用户请求时,可以处理一些附加的操作,如:用户权限验证.系统日志.异常处理.缓存等 ...
随机推荐
- SharePoint REST API - 使用REST接口对列表设置自定义权限
博客地址:http://blog.csdn.net/FoxDave SharePoint网站.列表和列表项都属于SecurableObject类型.默认情况下,一个安全对象继承父级的权限.对一个对 ...
- 高级数据类型--字典(dict)
一.字典介绍 dict(字典) 是 除列表以外 Python 之中 最灵活 的数据类型.字典同样可以用来 存储多个数据,通常用于存储 描述一个 物体 的相关信息 和列表的区别: 列表 是 有序 的对象 ...
- linux中ls -l介绍
[root@localhost ~]# ls -l 总计 152 -rw-r--r-- 1 root root 2915 08-03 06:16 a -rw------- 1 root root 10 ...
- nginx——Nginx 防爬虫优化
if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediap ...
- yarn不是内部指令 react-native不是内部指令
1.先查看是否全局安装 2.我遇到的是,全局安装了,依然有问题. 昨天装了一个高版本的node,成功后有个黑窗口我点了几个回车,在我的环境变量里加了一大推重复的变量,删除就正常了,如下图是我删完之后的
- 2018.4.27 java容器
一.容器的概念 在Java当中,如果有一个类专门用来存放其它类的对象,这个类就叫做容器,或者就叫做集合,集合就是将若干性质相同或相近的类对象组合在一起而形成的一个整体 二.容器与数组的关系 之所以需要 ...
- Ubuntu16.04交叉工具链安装
前言: 开发环境是64位的ubuntu16.04,交叉工具链是通过sudo apt-get install ....安装的,移植uboot2014.10,但是很奇怪,按照网上的介绍在start.s里面 ...
- HTML前序
HTML基本格式 <!DOCTYPE html> //文档类型声明 <html lang="zh-cn"> //表示HTML文档开始,属性lang,属性值= ...
- psql备份和恢复(ubuntu)
备份 sudo pg_dump -U username -f filename.sql dbname 恢复 psql -U username -f filename.sql dbname -- ...
- 管理工具:SWOT、PDCA、6W2H、SMART、WBS、时间管理
01:SWOT分析法 Strengths:优势 Weaknesses:劣势 Opportunities:机会 Threats:威胁 意义:帮您清晰地把握全局,分析自己在资源方面的优势与劣势,把握环境提 ...