十二个 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页面的时 ...
随机推荐
- VC6.0 突然打不开dsw 工程文件的解决方案
在vc编程中,经常遇到dsw工程文件无法打开,或者打开后看不到类和变量的问题.特别是把代码从一台电脑上copy到另一台电脑上以后,常常会碰到这种奇怪的问题.有时在编辑状态下也会发生成员变量或函数提示不 ...
- Ubuntu安装微信
1.系统是Ubuntu 16.04 64位系统,在网上先去下载electronic-wechat-Linux https://github.com/geeeeeeeeek/electr ...
- Oracle中session和processes的设置
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- TurnipBit开发板DIY呼吸的吃豆人教程实例
转载请以链接形式注明文章来源(MicroPythonQQ技术交流群:157816561,公众号:MicroPython玩家汇) 0x00前言 吃豆人是耳熟能详的可爱形象,如今我们的TurnipBit也 ...
- UIViewController生命周期控制-开发规范
从网上各位iOS们收集并总结: 各方法使用: init 中初始化一些UI组件,比如UIButton,UILabel等 loadView 中 createFields 接受参数,初始化变量 create ...
- 基于vue2+vuex+vue-router+sass+webpack的网易云音乐
[本博客为原创:http://www.cnblogs.com/HeavenBin/] 前言: 这段时间写的一个项目,供给大家互相学习,有什么疑问可以issues我. 源码地址:https://git ...
- HTTP2的新特性
多路复用 二进制分帧 首部压缩(Header Compression) 服务端推送(Server Push) 请求优先级
- Java基础(五)-Java序列化与反序列化
.output_wrapper pre code { font-family: Consolas, Inconsolata, Courier, monospace; display: block !i ...
- PyQt4 的事件与信号 -- 重写事件处理方法
# PyQt中的事件处理主要依赖重写事件处理函数来实现 import sys from PyQt4 import QtCore, QtGui class MainWindow(QtGui.QWidge ...
- SLAVE为什么一直不动了
导读 遇到SLAVE延迟很大,binlog apply position一直不动的情况如何排查? 问题描述 收到SLAVE延迟时间一直很大的报警,于是检查一下SLAVE状态(无关状态我给隐去了): ...