.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 ...
随机推荐
- iOS Privacy Policy
This application respects and protects the privacy of all users who use the service. In order to pro ...
- Flutter报错记录
1.Could not find an option named "androidx". Run 'flutter -h' (or 'flutter -h') for avai ...
- vue项目的开发
vue项目的开发 我们已经通过命令行创建了一个vue项目,并且打开了这个项目.下面是这个文件的src文件夹,这个文件夹放了整个项目的核心代码. 一.vue文件的用处简介. 1.assets文件夹,用来 ...
- RMAN备份数据库与表空间
脚本: 数据库备份: backup database format='/u01/app/oracle/oradata/Backup/oradb_%d_%s.bak'; 表空间备份:backup tab ...
- Pikachu-XSS
XSS(跨站脚本)概述 Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS.一般XSS可以分为如下几种常见类型: ...
- 创建mysql索引的方式
创建索引方式: 1.create index 索引名 on 表名 (字段) 2.alter table 表 add index 索引名 (字段) -- 普通索引 alter table 表名 ...
- IT兄弟连 HTML5教程 DIV+CSS的兼容性问题
使用DIV+CSS布局网页其实是很容易的事情,但各种浏览器之间的不兼容性问题,加大了页面布局的难度,给程序员带来很多不便,于是需要花费更多的时间在调试各种浏览器的兼容性上.因为部分CSS属性在不同的浏 ...
- Python高级特性——切片(Slice)
摘录廖雪峰网站 定义一个list: L = ['haha','xixi','hehe','heihei','gaga'] 取其前三个元素: >>> L[0],L[1],L[2] (' ...
- Consul初探-集成ocelot
前言 由于 Consul 的高可用性.丰富的API.友好的 Web 控制台界面等特点,Consul 的发展非常迅猛,得益于 .NETCore 社区的快速发展和社区成员的贡献,我们现在可以非常方便快速的 ...
- MFC程序出现uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)解决办法
在同一个地方摔倒两次之后,决定记录下来这个东西. 问题 1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl opera ...