.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 拦截器的使用的更多相关文章

  1. [Abp vNext 源码分析] - 3. 依赖注入与拦截器

    一.简要说明 ABP vNext 框架在使用依赖注入服务的时候,是直接使用的微软提供的 Microsoft.Extensions.DependencyInjection 包.这里与原来的 ABP 框架 ...

  2. Dora.Interception,为.NET Core度身打造的AOP框架 [3]:多样化拦截器应用方式

    在<以约定的方式定义拦截器>中,我们通过对拦截器的介绍了Dora.Interception的两种拦截机制,即针对接口的“实例拦截”针对虚方法的“类型拦截”.我们介绍了拦截器的本质以及基于约 ...

  3. Dora.Interception,为.NET Core度身打造的AOP框架 [2]:以约定的方式定义拦截器

    上一篇<更加简练的编程体验>提供了最新版本的Dora.Interception代码的AOP编程体验,接下来我们会这AOP框架的编程模式进行详细介绍,本篇文章着重关注的是拦截器的定义.采用“ ...

  4. 在ASP.NET Core MVC中子类Controller拦截器要先于父类Controller拦截器执行

    我们知道在ASP.NET Core MVC中Controller上的Filter拦截器是有执行顺序的,那么如果我们在有继承关系的两个Controller类上,声明同一种类型的Filter拦截器,那么是 ...

  5. 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 ...

  6. 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 ...

  7. asp.net mvc core 管道以及拦截器初了解

    今天来看一下asp.net core的执行管道.先看下官方说明: 从上图可以抛光,asp.net core的执行顺序是,当收到一个请求后,request请求会先经过已注册的中间件,然后会进入到mvc的 ...

  8. Asp.net Core 3.1基于AspectCore实现AOP,实现事务、缓存拦截器

    最近想给我的框架加一种功能,就是比如给一个方法加一个事务的特性Attribute,那这个方法就会启用事务处理.给一个方法加一个缓存特性,那这个方法就会进行缓存. 这个也是网上说的面向切面编程AOP. ...

  9. .net core autofac asyncinterceptor 异步拦截器开发

    autofac使用拦截器实现AOP,是基于Castle.Core的.然而Castle.Core并未提供原生异步支持.所以需要使用帮助类实现,这在autofac官方文档的已知问题中有详细说明: http ...

随机推荐

  1. 安卓逆向基础(002)-android虚拟机

    一, android分两种 1.Android 5.0以下(不含5.0) dalvik字节码 为dalvik虚拟机(jit机制) 基于寄存器架构 .dex=>dexopt=>.odex d ...

  2. 萌新入门Github请看这里,学不会远程教

    一些废话 本文的主旨是为初次接触Github的同学提供一个入门的教程,如果你已经是Github老鸟,可以忽略本文哦,另外本文只是抛砖引玉,其实最好的教程是官方文档!!! Github官网 Github ...

  3. python同步IO编程——基本概念和文件的读写

    IO——Input/Output,即输入输出.对于计算机来说,程序运行时候数据是在内存中的,涉及到数据交换的地方,通常是磁盘.网络等.比如通过浏览器访问一个网站,浏览器首先把请求数据发送给网站服务器, ...

  4. [译]C# 7系列,Part 5: private protected 访问修饰符

    原文:https://blogs.msdn.microsoft.com/mazhou/2017/10/05/c-7-series-part-5-private-protected/ C#有几个可访问性 ...

  5. django补充CBV和FBV模式

    django补充CBV和FBV模式FBV模式---函数:经常用的方式CBV模式---类CBV中url连接时函数名后面要接.as_view()class index(views.View): @... ...

  6. java面向对象 - 匿名对象

    一.匿名对象 1. 创建的对象,没有显示的赋给一个变量名,即为匿名对象. 2. 匿名对象只能调用一次 二.匿名对象使用 class Phone { private int price; public ...

  7. Skulpt在线模拟运行Python工具

    1. Skulpt是一个完全依靠浏览器端模拟实现Python运行的工具 2. 不需要预处理.插件或服务器端支持,只需编写python并重新载入即可. 3. 由于代码完全是在浏览器中运行的,所以不必担心 ...

  8. springboot使用hibernate validator

    前言 在开发中经常需要写一些字段校验的代码,比如字段非空,字段长度限制,邮箱格式验证等等,写这些与业务逻辑关系不大的代码个人感觉有两个麻烦: 验证代码繁琐,重复劳动 方法内代码显得冗长 每次要看哪些参 ...

  9. How to: Use XPO Upcasting in XAF 如何:在 XAF 中使用 XPO 强制转换

    In this topic, you will learn how to use the Upcasting feature of XPO in XAF. It is useful when you ...

  10. Elasticsearch核心技术与实战-学习笔记

    学习资源: Elasticsearch中文社区日报https://elasticsearch.cn/article/ Elasticsearch 官网 https://www.elastic.co/ ...