一、过滤器

AOP(面向切面编程)是一种架构思想,用于把公共的逻辑放到一个单独的地方,这样就不用每个地方都写重复的代码,比如程序中发生异常,不用每个地方都try catch 只要在(golbal的Application_Error)中统一进行异常处理。不用每个Actuon中都检查当前用户是否有执行权限,Asp.net.mvc中提供一个机制,每个Action执行之前都会执行我们的代码,统一检查即可。

一夫当关,万夫莫开!

1、 四种Filter :

在 ASP.NET MVC中提供了四个Filter(过滤器)接口实现了这种AOP机制,IAuthorizationFilter、IActionFilter、IResultFilter、IExceptionFilter

(1) IAuthorizationFilter 一般用来检查当前用户是否有Action的执行权限,在每个Action被执行钱执行OnAuthorization 方法;

(2)IActionFilter 也是在每个Action被执行前执行OnActionExecuting 方法,每个Action执行完成后执行OnActionExecuted 方法。和IAuthorizationFilter的区别是IAuthorizationFilter在IActionFilter之前执行,检查权限一般写到IAuthorizationFilter中;

(3)IResultFilter ,在每个ActionResult的前后执行IResultFilter,用的很少,后面有一个应用。

(4) IExceptionFilter,当Action执行发生为处理异常的时候执行OnException方法。在asp.net MVC中仍然可以使用"Global"的“Application_error”,但是建议用IExceptionFilter

定义的类可以在Global中GlobalFilter.Filters.Add(new ****Filter())的方式添加为全局的过滤器;

2、 IAuthorizationFilter:

在Global.asax文件里添加: GlobalFilters.Filters.Add(new CheckLoginFilter());

  1. public class CheckLoginFilter : IAuthorizationFilter
  2. {
  3. public void OnAuthorization(AuthorizationContext filterContext)
  4. {
  5. string ctrlName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
  6. string actionName = filterContext.ActionDescriptor.ActionName;
  7. if(ctrlName=="Login"&&(actionName=="Index"||actionName=="Login"))
  8. {
  9. //什么都不做
  10. }
  11. else//检查登陆状态
  12. {
  13. if(filterContext.HttpContext.Session["username"]==null)
  14. {
  15. ContentResult contentResult = new ContentResult();
  16. contentResult.Content = "没有登陆";
  17.  
  18. //如果在Filter中给filterContent.Result赋值了,那么将不再继续执行要执行的Filter
  19. //而是把filterContext.Result执行返回给用户,filterContext.Result是阻止Action执行的
  20. // filterContext.Result = contentResult;
  21. filterContext.Result = new RedirectResult("/Login/Index");//重定向
  22. }
  23. }
  24.  
  25. }
  26. }
  1. //Login/Index.csshtml
  2.  
  3. <form action="~/Login/Login" method="post">
  4. 用户名:<input type="text" name="username" />
  5. 密码: <input type="password" name="password"/>
  6. <input type="submit" value="登陆"/>
  7. </form>
  1. public class LoginController : Controller
  2. {
  3. public ActionResult Index()
  4. {
  5. return View();
  6. }
  7. public ActionResult Login(string username ,string password)
  8. {
  9. if(username == "admin"&& password=="")
  10. {
  11. Session["username"] = "admin";
  12. return Content("登陆成功");
  13. }
  14. else
  15. {
  16. return Content("登陆失败");
  17. }
  18. }
  19. }
  1. public class MainController : Controller
  2. {
  3. // GET: Main
  4.  
  5. public ActionResult Main()
  6. {
  7. return Content("已登陆主页"+Session["username"]);
  8. }
  9. }

3、IActionFilter:

在Global.asax文件里添加: GlobalFilters.Filters.Add(new LogActionFilter());

  1. public class LogActionFilter : IActionFilter
  2. {
  3. //Action执行后
  4. public void OnActionExecuted(ActionExecutedContext filterContext)
  5. {
  6. string actionName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
  7. string controllName = filterContext.ActionDescriptor.ActionName;
  8. string path = filterContext.HttpContext.Server.MapPath("~/log.txt");
  9. File.AppendAllText(path, "已经执行" + controllName + "." + actionName);
  10.  
  11. }
  12. //Action执行前
  13. public void OnActionExecuting(ActionExecutingContext filterContext)
  14. {
  15. string actionName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
  16. string controllName = filterContext.ActionDescriptor.ActionName;
  17. string path = filterContext.HttpContext.Server.MapPath("~/log.txt");
  18. File.AppendAllText(path, "将要执行" + controllName + "." + actionName);
  19. }
  20. }

4、IExceptionFilter

  1. public class ExceptionFilter : IExceptionFilter
  2. {
  3. public void OnException(ExceptionContext filterContext)
  4. {
  5. string path = filterContext.HttpContext.Server.MapPath("~/log.txt");
  6. Exception ex = filterContext.Exception;
  7. File.AppendAllText(path, ex.ToString()+"\n");
  8. }
  9. }

总结:全局Filter 一次编写,其他地方默认执行,可以添加多个同一个类型的全局Filter,按照添加顺序执行;

5、非全局Filter:只要让类继承自FilterAttribute类,然后该实现那个Filter接口就实现那个,不添加到GlobalFilter里,而是把自定义的Attribute添加到Controller类上或者Action方法上,这样Controller或者Action会执行;

二、Nuget

新的获取软件开发包的方法

1、 图形化添加;

2、命令行安装

安装:Install-package +包名

安装:Install-package +包名 -version 1.1.1

卸载:unInstall-package +包名

过滤器(Filter)和Nuget的更多相关文章

  1. Angularjs在控制器(controller.js)的js代码中使用过滤器($filter)格式化日期/时间实例

    Angularjs内置的过滤器(filter)为我们的数据信息格式化提供了比较强大的功能,比如:格式化时间,日期.格式化数字精度.语言本地化.格式化货币等等.但这些过滤器一般都是在VIEW中使用的,比 ...

  2. 网站过滤器Filter

    实际上,Filter与Servlet及其相似,区别只是FIlter的doFilter()方法里多了一个FilterChain的参数,通过该参数可以控制是否放行用户的请求.网站有了过滤器十分的方便,可以 ...

  3. paip.输出内容替换在Apache 过滤器filter的设置

    paip.输出内容替换在Apache 过滤器filter的设置 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog ...

  4. java Servlet中的过滤器Filter

    web.xml中元素执行的顺序listener->filter->struts拦截器->servlet. 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...

  5. [ionic开源项目教程] - 第6讲 过滤器filter的使用

    过滤器filter的使用 1.回顾 再熟悉一下tab1.html的代码: <div class="list"> <a ng-repeat="item i ...

  6. selvert的过滤器filter处理中文乱码

    注意问题:在学习用selvert的过滤器filter处理中文乱码时,在filter配置初始化时用了utf-8处理中文乱码,而在提交的jsp页面中却用了gbk.虽然两种都可以出来中文乱码,但是却造成了处 ...

  7. MVC之 自定义过滤器(Filter)

    MVC之 自定义过滤器(Filter) 一.自定义Filter 自定义Filter需要继承ActionFilterAttribute抽象类,重写其中需要的方法,来看下ActionFilterAttri ...

  8. Servlet中的过滤器Filter用法

    1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应. 主要用于对HttpServletRequest 进行预处理,也可以对Http ...

  9. Servlet中的过滤器Filter详解

    加载执行顺序 context-param->listener->filter->servlet web.xml中元素执行的顺序listener->filter->stru ...

随机推荐

  1. IntelliJ IDEA环境使用

    转:https://blog.csdn.net/zwj1030711290/article/details/80673482 https://blog.csdn.net/zrc199021/artic ...

  2. Hive 常用命令和语句

    示例数据库为 db_hive 1. 创建表 create-table.sql create table if not exists db_hive.tb_user ( id int, username ...

  3. Java解析Excel工具类(兼容xls和xlsx)

    依赖jar <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml&l ...

  4. 统计函数运行时间-CPU端

    C/C++中的计时函数是clock(),而与其相关的数据类型是clock_t.在MSDN中,查得对clock函数定义如下:  clock_t clock( void ); 这个函数返回从“开启这个程序 ...

  5. React后台管理系统-品类的增加、修改和查看

    1.页面 2.品类列表展示 let listBody = this.state.list.map((category, index) => {             return (      ...

  6. web之HTTP协议

    1.web引用程序 web(world wide web)也叫万维网,是一种基于超文本和HTTP的.全球性的.动态交互的.跨平台的分布式图形信息系统.是建立在Internet上的一种网络服务,为浏览者 ...

  7. linux命令详解-useradd,groupadd

    linux命令详解-useradd,groupadd 我们在linux命令行中输入useradd: Options:  -b, --base-dir BASE_DIR       base direc ...

  8. JavaWeb各大组件生命周期

    JavaWeb各大组件生命周期 servlet生命周期 服务器打开:在第一次请求时实例化与初始化:然后进行服务:最后服务器关闭销毁 Cookie生命周期:存储在客户端 如果不设置过期时间,则表示这个c ...

  9. 自定义动画函数JQuery实现

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 宁夏邀请赛F FLOYD

    Moving On Firdaws and Fatinah are living in a country with nn cities, numbered from 11 to nn.Each ci ...