.net core 拦截器的使用
.net core 拦截器的使用
实例代码:https://gitee.com/D_C_L/InterceptorTest.git
拦截器主要是将程序中的一些可以独立出去的模块进行拦截,比如幕等性,和身份认证服务等等,你想独立出去的东西,ActionFilterAttribute请求拦截器他里面几个方法,我们将一下的几个方法进行重写。
1,OnActionExecuting:在执行请求开始之前进行调用
2,OnActionExecuted:在执行请求开始之后进行调用
3,OnResultExecuting:在执行请求结束前进行调用
4,OnResultExecuted:在执行请求结束后进行调用
列如:
/// <summary>
/// 在执行请求开始之前进行调用
/// </summary>
/// <param name="context">执行的上下文</param>
public override void OnActionExecuting(ActionExecutingContext context)
{
context.HttpContext.Response.WriteAsync("在控制器执行之前调用");
}
里面可以编写你的代码,ActionExecutingContext 是请求进来的 上下文。
这个是里面的一些属性,你可以进行相对应的使用。、
异常拦截器的使用
IExceptionFilter实现这个接口,在Startup类里面添加 app.UseExceptionHandler("/Home/Error");也可以调到错误页面去。或者想下面重写
/// <summary>
/// 当然是发生异常时被调用了
/// </summary>
/// <param name="context">执行的上下文</param>
public void OnException(ExceptionContext context)
{
context.HttpContext.Response.WriteAsync("当然是发生异常时被调用了");
context.ExceptionHandled = true;//异常已经处理,不要再次处理了
}
全局拦截
如果说你要拦截你程序的所有请求,可以将拦截器配置到全局里面在Startup类添加一下代码。
ActionAttribute是你拦截器的类名
//全局拦截
services.AddMvc(options =>
{
options.Filters.Add(typeof(ActionAttribute));
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
部分控制器不进行拦截
当我们使用了全局拦截器之后,但是有的方法或者控制器我不想进行拦截器的话,我们可以编写一个空的拦截器不使用全局拦截器。
/// <summary>
/// 不需要登陆的地方加个这个空的拦截器
/// </summary>
public class NoSignAttribute : ActionFilterAttribute { }
然后在方法或者控制器上面添加一下代码
NoSignAttribute本来拦截器名称是这样的,我们可以忽略后面的默认名命NoSign
/// <summary>
/// 不需要登录使用这个[NoSign] 拦截器
/// </summary>
/// <returns></returns>
[NoSign]
public IActionResult Privacy()
{
return View();
}
然后我们在全局的拦截器里面在加上一段判断的代码,其实这个就是加上的两个拦截器,只是一个没有用,判断当前的请求方法或者控制上面有没有这个空的拦截器,如果有说明我们这个方法或者控制器不需要被拦截。直接返回出去。
/// <summary>
/// 在控制器执行之前调用
/// </summary>
/// <param name="context">执行的上下文</param>
public override void OnActionExecuting(ActionExecutingContext context)
{
// 判断是否加上了不需要拦截
var noNeedCheck = false;
if (context.ActionDescriptor is ControllerActionDescriptor controllerActionDescriptor)
{
noNeedCheck = controllerActionDescriptor.MethodInfo.GetCustomAttributes(inherit: true)
.Any(a => a.GetType().Equals(typeof(NoSignAttribute)));
}
if (noNeedCheck) return; context.HttpContext.Response.WriteAsync("在控制器执行之前调用");
}
局部拦截
如果说你只想拦截某个控制器或者某个方法的时候,你可以在方法或者控制器上面添加拦截器的注释。
ActionAttribute本来拦截器名称是这样的,我们可以忽略后面的默认名命Action
/// <summary>
/// 局部的使用拦截器
/// </summary>
/// <returns></returns>
[Action]
public IActionResult Index()
{
return View();
}
当然如果你不想使用拦截器,喜欢用中间件也可以,在管道请求的管道中直接进行拦截,这也是可以的。
如果有错误的地方,请帮我纠正。哈哈一起加油陌生人!!
.net core 拦截器的使用的更多相关文章
- [Abp vNext 源码分析] - 3. 依赖注入与拦截器
一.简要说明 ABP vNext 框架在使用依赖注入服务的时候,是直接使用的微软提供的 Microsoft.Extensions.DependencyInjection 包.这里与原来的 ABP 框架 ...
- Dora.Interception,为.NET Core度身打造的AOP框架 [3]:多样化拦截器应用方式
在<以约定的方式定义拦截器>中,我们通过对拦截器的介绍了Dora.Interception的两种拦截机制,即针对接口的“实例拦截”针对虚方法的“类型拦截”.我们介绍了拦截器的本质以及基于约 ...
- Dora.Interception,为.NET Core度身打造的AOP框架 [2]:以约定的方式定义拦截器
上一篇<更加简练的编程体验>提供了最新版本的Dora.Interception代码的AOP编程体验,接下来我们会这AOP框架的编程模式进行详细介绍,本篇文章着重关注的是拦截器的定义.采用“ ...
- 在ASP.NET Core MVC中子类Controller拦截器要先于父类Controller拦截器执行
我们知道在ASP.NET Core MVC中Controller上的Filter拦截器是有执行顺序的,那么如果我们在有继承关系的两个Controller类上,声明同一种类型的Filter拦截器,那么是 ...
- ASP.NET Core 3.0 gRPC 拦截器
目录 ASP.NET Core 3.0 使用gRPC ASP.NET Core 3.0 gRPC 双向流 ASP.NET Core 3.0 gRPC 拦截器 一. 前言 前面两篇文章给大家介绍了使用g ...
- ASP.NET Core搭建多层网站架构【9.2-使用Castle.Core实现动态代理拦截器】
2020/01/31, ASP.NET Core 3.1, VS2019, Autofac.Extras.DynamicProxy 4.5.0, Castle.Core.AsyncIntercepto ...
- asp.net mvc core 管道以及拦截器初了解
今天来看一下asp.net core的执行管道.先看下官方说明: 从上图可以抛光,asp.net core的执行顺序是,当收到一个请求后,request请求会先经过已注册的中间件,然后会进入到mvc的 ...
- Asp.net Core 3.1基于AspectCore实现AOP,实现事务、缓存拦截器
最近想给我的框架加一种功能,就是比如给一个方法加一个事务的特性Attribute,那这个方法就会启用事务处理.给一个方法加一个缓存特性,那这个方法就会进行缓存. 这个也是网上说的面向切面编程AOP. ...
- .net core autofac asyncinterceptor 异步拦截器开发
autofac使用拦截器实现AOP,是基于Castle.Core的.然而Castle.Core并未提供原生异步支持.所以需要使用帮助类实现,这在autofac官方文档的已知问题中有详细说明: http ...
随机推荐
- sql为什么用0,1表示男女?在sql语句里转好还是在页面转好?
转化语句:SELECT CASE `user_gender` WHEN '1' THEN '男' WHEN '0' THEN '未知'ELSE '女' END AS gender FROM `info ...
- java8-从Lamda到方法引用和构造引用
一方法引用概述 经过前面2章Lamda原理引入和Lamda解析,基本就会熟练使用Lamda表达式,这次我们更深入点.来了解一下方法引用. 方法引用是特定Lamda表达式的一种简写,其思路就是能替换La ...
- three.js 制作太阳系统
最近学了three.js,想拿来练练手,喜欢宇宙,于是亲手撸代码来完成这个,为了更真实,于是查了一些相关资料.1. 距离太阳由近及远分别是[水星,金星,地球,火星,木星,土星,天王星,海王星]2. 他 ...
- OurEDA慕课网开发记录
项目说明 OurEDA实验室每年都会面向大一新生招人,每周的沙龙都会有学长来讲课,传经验,录下来的沙龙视频就非常有价值,因此,在老师的安排下,我负责开发了慕课网这样一个项目. 首要问题及其解决方案 视 ...
- 重新精读《Java 编程思想》系列之类的访问权限
Java 中,我们用访问权限修饰词确定库中的哪些类对于使用者是可以使用的. 访问权限修饰词有 public,protected,private 和什么都不写. 那么对于类来说,我们只可以用 publi ...
- python通过人脸识别全面分析好友,一起看透你的“朋友圈”
微信:一个提供即时通讯服务的应用程序,更是一种生活方式,超过数十亿的使用者,越来越多的人选择使用它来沟通交流. 不知从何时起,我们的生活离不开微信,每天睁开眼的第一件事就是打开微信,关注着朋友圈里好友 ...
- springboot windows10风格 activiti 整合项目框架源码 shiro 安全框架 druid
官网:www.fhadmin.org 此项目为Springboot工作流版本 windows 风格,浏览器访问操作使用,非桌面应用程序. 1.代码生成器: [正反双向](单表.主表.明细表.树形表 ...
- Dynamics 365中使用计算字段自动编号字段实时工作流自动生成分组编码加流水号的自动编号字段值
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 如何Windows下配置Prometheus的监控数据文件为3天
如上图,prometheus的data文件夹时间久了会变得很大,听说是保留15天的数据.但是实际上,我只需要保留3天的数据就够了,之前试过用批处理文件清理,但是强行删除会导致peometheus崩溃, ...
- MySQL去重保留最大的那条记录(取最新的记录)
以用户登录日志表为例,取用户最近登录的设备 1 SET NAMES utf8mb4; 2 ; 3 4 -- ---------------------------- 5 -- Table struct ...