过滤器(Filter)和Nuget
一、过滤器
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());
public class CheckLoginFilter : IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext filterContext)
{
string ctrlName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
string actionName = filterContext.ActionDescriptor.ActionName;
if(ctrlName=="Login"&&(actionName=="Index"||actionName=="Login"))
{
//什么都不做
}
else//检查登陆状态
{
if(filterContext.HttpContext.Session["username"]==null)
{
ContentResult contentResult = new ContentResult();
contentResult.Content = "没有登陆"; //如果在Filter中给filterContent.Result赋值了,那么将不再继续执行要执行的Filter
//而是把filterContext.Result执行返回给用户,filterContext.Result是阻止Action执行的
// filterContext.Result = contentResult;
filterContext.Result = new RedirectResult("/Login/Index");//重定向
}
} }
}
//Login/Index.csshtml <form action="~/Login/Login" method="post">
用户名:<input type="text" name="username" />
密码: <input type="password" name="password"/>
<input type="submit" value="登陆"/>
</form>
public class LoginController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Login(string username ,string password)
{
if(username == "admin"&& password=="")
{
Session["username"] = "admin";
return Content("登陆成功");
}
else
{
return Content("登陆失败");
}
}
}
public class MainController : Controller
{
// GET: Main public ActionResult Main()
{
return Content("已登陆主页"+Session["username"]);
}
}
3、IActionFilter:
在Global.asax文件里添加: GlobalFilters.Filters.Add(new LogActionFilter());
public class LogActionFilter : IActionFilter
{
//Action执行后
public void OnActionExecuted(ActionExecutedContext filterContext)
{
string actionName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
string controllName = filterContext.ActionDescriptor.ActionName;
string path = filterContext.HttpContext.Server.MapPath("~/log.txt");
File.AppendAllText(path, "已经执行" + controllName + "." + actionName); }
//Action执行前
public void OnActionExecuting(ActionExecutingContext filterContext)
{
string actionName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
string controllName = filterContext.ActionDescriptor.ActionName;
string path = filterContext.HttpContext.Server.MapPath("~/log.txt");
File.AppendAllText(path, "将要执行" + controllName + "." + actionName);
}
}
4、IExceptionFilter
public class ExceptionFilter : IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
string path = filterContext.HttpContext.Server.MapPath("~/log.txt");
Exception ex = filterContext.Exception;
File.AppendAllText(path, ex.ToString()+"\n");
}
}
总结:全局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的更多相关文章
- Angularjs在控制器(controller.js)的js代码中使用过滤器($filter)格式化日期/时间实例
Angularjs内置的过滤器(filter)为我们的数据信息格式化提供了比较强大的功能,比如:格式化时间,日期.格式化数字精度.语言本地化.格式化货币等等.但这些过滤器一般都是在VIEW中使用的,比 ...
- 网站过滤器Filter
实际上,Filter与Servlet及其相似,区别只是FIlter的doFilter()方法里多了一个FilterChain的参数,通过该参数可以控制是否放行用户的请求.网站有了过滤器十分的方便,可以 ...
- paip.输出内容替换在Apache 过滤器filter的设置
paip.输出内容替换在Apache 过滤器filter的设置 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog ...
- java Servlet中的过滤器Filter
web.xml中元素执行的顺序listener->filter->struts拦截器->servlet. 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...
- [ionic开源项目教程] - 第6讲 过滤器filter的使用
过滤器filter的使用 1.回顾 再熟悉一下tab1.html的代码: <div class="list"> <a ng-repeat="item i ...
- selvert的过滤器filter处理中文乱码
注意问题:在学习用selvert的过滤器filter处理中文乱码时,在filter配置初始化时用了utf-8处理中文乱码,而在提交的jsp页面中却用了gbk.虽然两种都可以出来中文乱码,但是却造成了处 ...
- MVC之 自定义过滤器(Filter)
MVC之 自定义过滤器(Filter) 一.自定义Filter 自定义Filter需要继承ActionFilterAttribute抽象类,重写其中需要的方法,来看下ActionFilterAttri ...
- Servlet中的过滤器Filter用法
1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应. 主要用于对HttpServletRequest 进行预处理,也可以对Http ...
- Servlet中的过滤器Filter详解
加载执行顺序 context-param->listener->filter->servlet web.xml中元素执行的顺序listener->filter->stru ...
随机推荐
- NutDao配置多数据源
首先,我必须声明,这是一个非常简单的方法,很多小菜没做出来,是因为把nutz想得太复杂 数据源(或者是数据库连接池),在Nutz.Ioc看来,是一个普通的Bean,没任何特别之处. 再强调一点,除了$ ...
- 2017.10.27 C语言精品集
第一章 程序设计和C语言 1.1 什么是计算机程序? @ ······ 所谓程序,就是一组计算机能识别和执行的指令.每一条指令使计算机执行特定的操作. 计算机的一切操作都是由程序控制的.所以计算机的本 ...
- an exception occurred while initializing the database.
对于手动删除本地的LocalDB数据库之后出现标题所示异常的,推荐下面的命令: sqllocaldb.exe stop v11.0 sqllocaldb.exe delete v11.0 在程序包管理 ...
- Java 压缩文件夹工具类(包含解压)
依赖jar <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons ...
- office2010
MS office2010 360网盘:http://yunpan.cn/QajXaRWbnpTzF (提取码:cf72) 如何激活参见我下面的博客: http://www.cnblogs.com/l ...
- 前端JavaScript之BOM
BOM:浏览器对象模型,操作浏览器部分功能的API.比如让浏览器自动滚动. 1.window对象 所有浏览器都支持 window 对象.概念上讲.一个html文档对应一个window对象.功能上讲: ...
- 洛谷P1968 美元汇率
题目背景 此处省略maxint+1个数 题目描述 在以后的若干天里戴维将学习美元与德国马克的汇率.编写程序帮助戴维何时应买或卖马克或美元,使他从100美元开始,最后能获得最高可能的价值. 输入输出格式 ...
- 以CentOS为操作系统的vps或服务器安装lnmp运行环境的方法
安装步骤: 1.使用putty或类似的SSH工具登陆VPS或服务器: 登陆后运行:screen -S lnmp 如果提示screen: command not found 命令不存在可以执行:yum ...
- python中的集合内置方法小结
#!/usr/local/bin/python3 # -*- coding:utf-8 -*- #集合性质:需要传入一个list,且不含重复的元素,无序 list_1=[1,2,1,4,5,8,3,4 ...
- Python学习笔记:PEP8常用编程规范
PEP8编码规范是一种非常优秀的编码规范,也得到了Python程序员的普遍认可,如果实践中或者项目中没有统一的编码规范,建议尽量遵循PEP8编码规范,当然如果项目中已经有了自身的编码规范,应当优先遵循 ...