首页 > 其他分享 >.Net Core AlwaysRunResultFilter

.Net Core AlwaysRunResultFilter

时间:2023-08-03 23:12:02浏览次数:32  
标签:OnResultExecutionAsync Core AlwaysRunFilter ResultExecutedContext AlwaysRunResul

目录

作用

  1. 修改返回值,始终会触发,即使filter已经中断也会执行AlwaysRunFilter
  2. 任何时刻都会执行一遍, 可以在做了缓存的时候(如果有缓存并中断了,只有AlwaysRunFilter会执行),将一部3. 分查数据库的数据添加进去
  3. 返回前触发一次
  4. 返回后触发一次

如果都设置执行顺序为:

  1. ResultExecutingContext
  2. 返回值 (ActionResult)
  3. ResultExecutedContext

实现

IAlwaysRunResultFilter

  1. 需要继承 Attribute 并实现 IAlwaysRunResultFilter
  2. 实现接口方法

执行顺序为:

  1. OnResultExecutionAsync
  2. 返回值
  3. ResultExecutedContext

IAsyncAlwaysRunResultFilter

  1. 需要继承 Attribute并实现 IAsyncAlwaysRunResultFilter
  2. 实现接口方法
  3. 该接口只提供一个 OnResultExecutionAsync方法,如果想执行ResultExecutedContext方法,需要执行方法中ResultExecutionDelegate委托并取返回值然后代码在执行为ResultExecutedContext方法

执行顺序为:

  1. OnResultExecutionAsync
  2. 返回值
  3. ResultExecutedContext

Demo

CustomAsyncAlwaysRunResultFilterAttribute.cs

sing Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;

namespace Cnpc.Com.Ioc.WebApp.Filter.AlwaysRunFilter
{
    public class CustomAsyncAlwaysRunResultFilterAttribute : Attribute, IAsyncAlwaysRunResultFilter
    {
        public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
        {
            {
                JsonResult json = (JsonResult)context.Result;  //修改返回值并在基础上增加新的数据
                context.Result = new JsonResult(new
                {
                    sussces = true,
                    httpStatus = 200,
                    result = json.Value
                });
            }
            ResultExecutedContext executed = await next();
            {
                Console.WriteLine("ResultExecutedContext");
            }
        }
    }
}

全局注册

Program.cs

builder.Services.AddControllersWithViews(
options =>
{
    //这样注册将对所有action 都生效
    options.Filters.Add<CustomAsyncAlwaysRunResultFilterAttribute>();
}).AddControllersAsServices();

标签:OnResultExecutionAsync,Core,AlwaysRunFilter,ResultExecutedContext,AlwaysRunResul
From: https://www.cnblogs.com/qfccc/p/17602241.html

相关文章

  • .Net Core NLog+oracel
    目录简介引用Program.csNlog.config数据库测试简介NLog是一个灵活且免费的日志记录平台,适用于各种.NET平台,包括.NET标准。NLog使写入多个目标变得容易。(数据库、文件、控制台)并动态更改日志记录配置。引用<ItemGroup><PackageReferenceInclude="NLog"Version="5......
  • Asp.net Web Api .net6 Controller返回值总结
    1、特定的类型最基本的操作返回基元或复杂数据类型,例如, string 或自定义对象。请参考以下操作,该操作返回自定义 Product 对象的集合:[HttpGet]publicTask<List<Product>>Get()=>_productContext.Products.OrderBy(p=>p.Name).ToListAsync();2、返回IEnumer......
  • asp.net Core上传文件
    asp.netcore后台代码通过Request获取客户端上传的文件[HttpPost][Route("Upload")]publicasyncTask<IActionResult>uploadFiles(){try{foreach(varfilein......
  • .Net Core MiddleWare
    目录作用Use第一种第二种UseMiddleWareCustomMiddleWare.csProgram.csMapMapWhen作用中间件是一种装配到应用管道以处理请求和响应的软件。每个组件:选择是否将请求传递到管道中的下一个组件。可在管道中的下一个组件前后执行工作。请求委托用于生成请求管道。请求委托......
  • RS485自由转PROFINET网关RS485自由通讯协议
    捷米JM-RS485/232-PN(RS485转Profinet)将具有RS485/232接口、自由通信协议接口的设备与PROFINET相连,作为PROFINET现场总线系统的一个设备。捷米JM-RS485/232-PN集成了一个2端口交换机。受支持的以太网服务:ping、arp、SNMP和LLDP。端口诊断。禁用端口。实时、等时同步实时通信(RT......
  • T4 模板: 为 ASP.NET MVC 开发人员快速入门指南
    http://blogs.msdn.com/b/webdev/archive/2009/01/29/t4-templates-a-quick-start-guide-for-asp-net-mvc-developers.aspx 在中提到我们的最近博客文章,ASP.NETMVC发布候选版,我们的代码生成功能(即,添加控制器和添加视图)现在使用T4(文本模板转换工具包)模板化技术在幕后。因为......
  • C# MVC 自学笔记—10 在 ASP.NET MVC 中使用页面检查器
    VisualStudio2012年页督察是与集成的浏览器的web开发工具。中集成浏览器中,选择任意元素,页面检查器立即突出显示该元素的源代码和CSS。可以浏览任何MVC视图、快速查找呈现标记的来源和使用右内的VisualStudio环境浏览器工具。观看视频本教程演示如何启用检查模式,然后快......
  • 堆 Heap & 栈 Stack(.Net)【概念解析系列_3】【C# 基础】
    〇、前言本文主要围绕.Net框架中的托管堆(Heap,简称堆)和堆栈(Stack,简称栈)展开。.Net程序在CLR(CommonLanguageRuntime公共语言运行时)上运行时,内存被从逻辑上划分为两个主要部分:堆和栈。除了栈和堆之外,CLR还维护了其他一些内存区域,例如静态存储区域(StaticStorageArea)、常量......
  • 自己整理的ASP.NET基础 (不断的更新)
    .列举ASP.NET页面之间传递值的几种方式。答.1).使用QueryString,如....?id=1;response.Redirect()....                 2).使用Session变量                 3).使用Server.Transfer--------------------------------------------......
  • Asp.net MVC 3实例学习之ExtShop(一)————创建应用并设置开发环境
         在VS2010中创建一个如图1所示的“ExtShop”项目,然后在图2的窗口中选择“Empty”,单击“OK”完成项目创建,项目的目录结构和已包含文件如图3所示。     其中,Content文件夹下的Site.css文件是整个网站的CSS文件。Script文件夹中,已包含了jquery的脚本文件。在View目录......