十二个 ASP.NET Core 例子——过滤器
目录:
- 过滤器介绍
- 过滤器类别
- 自定义过滤器和过滤特性
- 直接短路返回内容
- 过滤器与中间件的区别
- 如果要全局日志,不要用过滤器
1.过滤器介绍
没有权限直接返回,资源缓存,Action执行前执行后过滤,异常定制化处理,结果定制化处理 等一些操作都可以用过滤器.而且能省去不少代码
官方解释:ASP.NET Core MVC中的过滤器允许您在请求处理管道中的某些阶段之前或之后运行代码
2.过滤器类别[直接引用官方解释]
每个过滤器类型在过滤器管道中的不同阶段执行。
授权过滤器首先运行,并用于确定当前用户是否被授权用于当前请求。如果请求未经授权,它们可能使管道短路。
资源过滤器是第一个在授权后处理请求的过滤器。他们可以在过滤器管道的其余部分之前运行代码,并在管道的其余部分完成之后运行代码。出于性能原因,它们可用于实现缓存或以其他方式短路过滤器管道。因为它们在模型绑定之前运行,所以它们对于需要影响模型绑定的任何东西都是有用的。
操作过滤器可以在调用单个操作方法之前和之后立即运行代码。它们可用于操作传递到操作中的参数,并从操作返回结果。
异常过滤器用于将全局策略应用于任何事情已写入响应体之前发生的未处理异常。
结果过滤器可以在执行单个操作结果之前和之后立即运行代码。只有当action方法成功执行并且对于必须围绕视图或格式化程序执行的逻辑有用时,它们才会运行
3.自定义过滤器
自定义过滤器两种方式.这里单独用action过滤器介绍
a.继承IActionFilter实现自己的过滤器类,并且在sartUp,mvc服务中注入. 全局都会过滤,在任意一个action执行前和执行后都会过滤一次
IActionFilter继承需要实现两个方法OnActionExecuted,OnActionExecuting,分别是动作执行前和动作执行后
First:自定义过滤器类
public class MyActionFilter : IActionFilter
{
public void OnActionExecuted(ActionExecutedContext context)
{
var s = "Filter_OnActionExecuted";
} public void OnActionExecuting(ActionExecutingContext context)
{
var s = "Filter_OnActionExecuted";
}
}
Second:注入
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc(options =>
{
options.Filters.Add(new MyActionFilter());
});
}
b.继承Attribute, IActionFilter,通过Attribute特性标识到想要过滤的地方实现局部过滤(controller,action)
First:自定义过滤特性
public class MyActionFilterAttribute : Attribute, IActionFilter
{
public void OnActionExecuted(ActionExecutedContext context)
{
var s = "Attribute_OnActionExecuted";
} public void OnActionExecuting(ActionExecutingContext context)
{
var s = "Attribute_OnActionExecuting";
}
}
Second:标注限制单个action过滤
[MyActionFilter]
public IActionResult Index()
{
return View();
}
Second:标注限制单个controller过滤
[MyActionFilter]
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
} public IActionResult About()
{
ViewData["Message"] = "Your application description page."; return View();
} public IActionResult Contact()
{
ViewData["Message"] = "Your contact page."; return View();
} public IActionResult Error()
{
return View();
}
}
注意点:当你实现自定义过滤器注入后,又实现了该类别过滤器的特性.那么执行顺序是全局过滤器OnActionExecuting,再是特性OnActionExecuting,再是特性OnActionExecuted,最后是过滤器OnActionExecuted.
4.直接短路返回内容
public class MyActionFilterAttribute : Attribute, IActionFilter
{
public void OnActionExecuted(ActionExecutedContext context)
{
context.Result = new ContentResult()
{
Content = "Resource unavailable - header should not be set"
};
} public void OnActionExecuting(ActionExecutingContext context)
{
var s = "Attribute_OnActionExecuting";
}
}
只要返回ContentResult就会短路,后面的所有逻辑不会再处理
5.过滤器与中间件的区别
过滤器余中间件非常的像。引用文章地址。区别在于:同作为两个AOP利器,过滤器更贴合业务,它关注于应用程序本身,比如你看ActionFilter
和 ResultFilter
,它都直接和你的Action,ActionResult交互了,是不是离你很近的感觉,那我有一些比如对我的输出结果进行格式化啦,对我的请求的ViewModel进行数据验证啦,肯定就是用Filter无疑了。它是MVC的一部分,它可以拦截到你Action上下文的一些信息,而中间件是没有这个能力的。
6.如果要全局日志,不要用过滤器
官方文档中表示。建议不要用过滤器来作为日志记录
原因:避免创建和使用纯粹用于记录目的的过滤器,因为内置的框架记录功能可能已经提供您需要的。如果要将过滤器添加日志记录,则应将注意力集中在特定于过滤器的业务领域问题或行为上,而不是MVC操作或其他框架事件。
十二个 ASP.NET Core 例子——过滤器的更多相关文章
- 十二个 ASP.NET Core 例子
原文地址:http://piotrgankiewicz.com/2017/04/17/asp-net-core-12-samples/ 作者:Piotr Gankiewicz 翻译:杨晓东(Savor ...
- 十二个 ASP.NET Core 例子——中间件
目录: 什么是中间件(IApplicationBuilder) 创建 顺序规则 Asp.Net Core 内置的中间件 1.什么是中间件 官方:中间件是组装成应用程序管道以处理请求和响应的软件.每个组 ...
- 十二个 ASP.NET Core 例子——1.1版本 EF MySql快速搭建
core1.0的时候搭建过一次mysql EF. 一大推问题.最近在core1.1 又重新搭了一次.简单搭建还挺快,没出现什么幺蛾子.总结下步骤 建立项目,例如ASP.NET Core1.1 WebA ...
- 十二个 ASP.NET Core 例子——IOC
目录 简单介绍 core自带IOC的实现解释 1.简单介绍 (个人理解) 是什么:IOC是一种设计原则,而非设计模式,是对流程控制,当你注入你需要的定制化类时,流程就确定了 怎么用:和IOC容器说你这 ...
- 十二个 ASP.NET Core 例子——配置操作
目录: 简单配置(利用configration 键值读取) 使用选项和配置对象(自定义类绑定配置文件实现读取) IOptionsSnapshot(配置文件更改时也变化) 内存数据放到配置对象中 实体框 ...
- 解说asp.net core MVC 过滤器的执行顺序
asp.net core MVC 过滤器会在请求管道的各个阶段触发.同一阶段又可以注册多个范围的过滤器,例如Global范围,controller范围等.以ActionFilter为例,我们来看看过滤 ...
- ASP.NET Core 使用过滤器移除重复代码
USING ACTIONFILTERS TO REMOVE DUPLICATED CODE ASP.NET Core 的过滤器可以让我们在请求管道的特定状态之前或之后运行一些代码.因此如果我们的 ac ...
- ASP.NET Core MVC 过滤器介绍
过滤器的作用是在 Action 方法执行前或执行后做一些加工处理.使用过滤器可以避免Action方法的重复代码,例如,您可以使用异常过滤器合并异常处理的代码. 过滤器如何工作? 过滤器在 MVC Ac ...
- asp.net Core 使用过滤器判断请求客户端是否为移动端,并实现PC端和移动端请求映射和自动跳转
很多时候我们做网站时单纯的用bootstrap等前端框架实现的前端自适应带给用户的体验并不太好,所以为了提高用户体验会专门针对PC端网页重新设计一套移动端网页,但是怎么才能做到在移动端访问PC页面的时 ...
随机推荐
- 视频云SDK iOS持续集成项目实践
1. 前言 2016年, 我们维护的 iOS推流播放融合SDK KSYLive_iOS 在github上发布了40多个版本, 平均两周发布一个新版本, 经历了最初痛苦的全手动版本构建和维护, 到后来慢 ...
- python匿名函数
文章导读: 以前自己一直没搞明白Python中的匿名函数,现在拿这个问题基本上搞明白了,拿自己的理解整成一篇文章,附带大量例子,让其更加好理解. 在编程语言中,函数的应用: 1. 代码块重复,这时候必 ...
- CentOS下 elasticsearch集群安装
1.进入root目录并下载elasticsearch cd /root wget https://download.elastic.co/elasticsearch/elasticsearch/ela ...
- 盗版SQL Server的性能限制
盗版SQL Server的性能限制 微软的SQL Server产品分为两种卖法1.盒装 :Server+CAL授权方式(SQL2017取消了Server+CAL授权方式,盗版序列号,一般电脑城有卖光盘 ...
- JAVA NIO学习四:Path&Paths&Files 学习
今天我们将学习NIO 的最后一章,前面大部分涉及IO 和 NIO 的知识都已经讲过了,那么本章将要讲解的是关于Path 以及Paths 和 Files 相关的知识点,以对前面知识点的补充,好了言归正传 ...
- Debian安装fail2ban来防止扫描
vps的root密码不要设置的太简单,这样很容易被攻破,你可以安装如下软件来降低vps被攻破的机会. 输入如下命令: apt-get install fail2ban 提示如下表示安装完成: root ...
- Java笔记:字符串详解
字符串详解 更新时间:2018-1-6 21:20:39 String 字符串创建 String str1="ABC";//推荐使用 String str2 = new Strin ...
- ssh整合开发
ssh整合思想 ssh整合 第一步:导入ssh相关jar包 第二步:搭建struts环境 (1)创建 action struts.xml配置文件, 配置action struts.xml约束 & ...
- faster-rcnn在编译时遇到的一些问题
1.在安装faster-rcnn事如果报这种错误 In file included :, , , , , , : ./include/caffe/util/cudnn.hpp: In function ...
- CSS3中only-child伪类选择器
<body> <style type="text/css"> //只对li1设置样式 li:nth-child(1):nth-last-child(1){ ...