首页 > 其他分享 >.net core(.net 6) IResourceFilter 的基础使用(IAsyncResourceFilter)

.net core(.net 6) IResourceFilter 的基础使用(IAsyncResourceFilter)

时间:2023-01-12 15:01:13浏览次数:44  
标签:IAsyncResourceFilter core CustomResourceFilterAttribute API IResourceFilter Filt

a 定义CustomResourceFilterAttribute扩展类,继承父类Attribute,实现 IResourceFilter接口

b 实现接口方法

c 标记在API action上

1、CustomResourceFilterAttribute扩展类

Attribute类为标记类。

IResourceFilter接口包括OnResourceExecuted、OnResourceExecuting两个方法;OnResourceExecuting在API执行前执行,OnResourceExecuted在API执行后执行。

using Microsoft.AspNetCore.Mvc.Filters;
using System;

namespace Demo02.Utility.Filters
{
    /// <summary>
    /// 自定义ResourceFilter标记类
    /// </summary>
    public class CustomResourceFilterAttribute : Attribute, IResourceFilter
    {
        /// <summary>
        /// API执行后 执行
        /// </summary>
        /// <param name="context"></param>
        /// <exception cref="NotImplementedException"></exception>
        public void OnResourceExecuted(ResourceExecutedContext context)
        {
            Console.WriteLine("======执行CustomResourceFilterAttribute.OnResourceExecuted====");
        }

        /// <summary>
        /// API执行前 执行
        /// </summary>
        /// <param name="context"></param>
        /// <exception cref="NotImplementedException"></exception>
        public void OnResourceExecuting(ResourceExecutingContext context)
        {
            Console.WriteLine("======执行CustomResourceFilterAttribute.OnResourceExecuting====");
        }
    }
}

2、在action上标记并测试

在action上标记‘CustomResourceFilterAttribute‘,Attribute可省。

 

using Demo02.Model;
using Demo02.Utility.Filters;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace Demo02.Controllers
{
    /// <summary>
    /// Filters
    /// </summary>

    [ApiVersion("1.0")]
    [Route("[controller]/V{version:apiVersion}")]
    [ApiController]
    public class FiltersController : ControllerBase
    {
        private readonly ILogger<FiltersController> _logger;

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="logger">控制台日志</param>
        public FiltersController(ILogger<FiltersController> logger)
        {
            _logger = logger;
        }

        /// <summary>
        /// GET AOP测试 ResourceFilter
        /// </summary>
        /// <returns></returns>
        [HttpGet()]
        [Route("ResourceFilter/CustomResourceFilter")]
        [CustomResourceFilter]
        public IActionResult GetString()
        {
            return new JsonResult(new ApiResut<String>()
            {
                Success = true,
                Data = "AOP ResourceFilter 测试",
                Time = DateTime.Now.ToString()

            });
        }
     
    }
}

 

执行测试:

 

 

 

3、IAsyncResourceFilter(异步)

IAsyncResourceFilter,实现步骤同IResourceFilter,只是接口不同实现方法不同。

CustomAsyncResourceFilterAttribute 类

using Microsoft.AspNetCore.Mvc.Filters;
using System;

namespace Demo02.Utility.Filters
{
    /// <summary>
    /// 自定义AsyncResourceFilter标记类
    /// </summary>
    public class CustomAsyncResourceFilterAttribute : Attribute, IAsyncResourceFilter
    {
        /// <summary>
        /// API异步action 执行前后
        /// </summary>
        /// <param name="context"></param>
        /// <param name="next"></param>
        /// <returns></returns>
        public async Task OnResourceExecutionAsync(ResourceExecutingContext context, ResourceExecutionDelegate next)
        {
            Console.WriteLine("======Before======CustomAsyncResourceFilterAttribute.OnResourceExecutionAsync================");
            await next.Invoke();
            Console.WriteLine("======After======CustomAsyncResourceFilterAttribute.OnResourceExecutionAsync================");

        }
    }
}

测试API Action

     /// <summary>
        ///  GET AOP测试 AsyncResourceFilter
        /// </summary>
        /// <returns></returns>
        [HttpGet()]
        [Route("ResourceFilter/CustomAsyncResourceFilter")]
        [CustomAsyncResourceFilter]
        public IActionResult GetSomeThing()
        {
            return new JsonResult(new ApiResut<String>()
            {
                Success = true,
                Data = "AOP AsyncResourceFilter 测试"

            });
        }

 

标签:IAsyncResourceFilter,core,CustomResourceFilterAttribute,API,IResourceFilter,Filt
From: https://www.cnblogs.com/yyd-sun/p/17046645.html

相关文章

  • 07-GoogLenet 图像分类
    Inception结构的主要思路是用密集成分来近似最优的局部稀疏结构。原始Inception结构如下图所示:  显然从上图中可以看出,原始Inception结构采用1×1、3×3......
  • ResNetv2 论文解读
    前言本文的主要贡献在于通过理论分析和大量实验证明使用恒等映射(identitymapping)作为快捷连接(skipconnection)对于残差块的重要性。同时,将BN/ReLu这些activation操作......
  • .net core(.net 6) webAPI中的AOP支持 ----Filter
    在.netcore中Filter分为以下六大类:1、AuthorizeAttribute(权限验证)2、IResourceFilter(资源缓存)3、IActionFilter(执行方法前后的记录)4、IResultFilter(结果生成前后扩......
  • c# .net开发 wpf框架,开发聊天、网盘、信息发布、视频播放功能
    工作之余,开发了一个小程序,网页端用vue.js框架,桌面端wpf,后台.net,集成identityserver4认证授权。前端wpf .net6框架后端.net6,微服务架构认证授权:identityserver4用......
  • ASP.NET Core 配置 Swagger 显示接口注释描述信息
    添加注释说明给Controller和Action添加注释把注释信息在Swagger中展示这时候需要用到XML文档,因为它是通过XML来维护Swagger文档的一些信息。单击鼠标右键,选择项目......
  • C# .NET MVC 表单提交前校验数据等
     页面上写2个button,一个普通button,另一个是submit,submit的这个隐藏。校验函数写在普通button里,普通buttonclick函数中去提交表单。 页面: <inputtype="button"va......
  • .Net Core Logging模块源码阅读
    .NetCoreLogging模块源码阅读前言在Asp.NetCoreWebapi项目中经常会用到ILogger,于是在空闲的时候就clone了一下官方的源码库下来研究,这里记录一下。官方库地址在:h......
  • 06-DenseNet 图像分类
          DenseNet代码实现(pytorch):1importtorch2importtorch.nnasnn3importtorchvision45print("PyTorchVersion:",torch.__ver......
  • 在 Kubernetes 中部署并使用 KubeEdge
    作者:马伟,青云科技容器顾问,云原生爱好者,目前专注于云原生技术,云原生领域技术栈涉及Kubernetes、KubeSphere、KubeKey等。边缘计算在广泛制造业、工业、零售和金融等行......
  • elemnet-plus 使用总结
    1.el-date-picker设置起始周的日期备注:如果添加dayjs.en.weekStart=2不起作用需要检查是否添加了el-config-provider语言设置或者在app.vue中添加<template><......