如何具体实现.Net Core Aop中IResourceFilter接口以实现资源过滤功能?

2026-03-26 23:041阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计925个文字,预计阅读时间需要4分钟。

如何具体实现.Net Core Aop中IResourceFilter接口以实现资源过滤功能?

目录

一、简介

二、IResourceFilter(同步资源缓存)

1.定义Filter

2.IAsyncResourceFilter(异步资源缓存)

三、总结

一、简介

在.NET Core中,Filter是一种用于处理HTTP请求和响应的机制。它可以用于实现权限验证、日志记录、缓存等功能。

二、IResourceFilter(同步资源缓存)

1.定义Filter

同步Filter在请求处理过程中同步执行,它可以在请求到达控制器之前或之后执行。以下是一个简单的同步Filter示例:

csharppublic class SyncResourceFilter : IResourceFilter{ public void OnResourceExecuted(ResourceExecutedContext context) { // 请求处理完毕后执行 }

public void OnResourceExecuting(ResourceExecutingContext context) { // 请求处理之前执行 }}

2. IAsyncResourceFilter(异步资源缓存)异步Filter在请求处理过程中异步执行,它可以在请求到达控制器之前或之后执行。以下是一个简单的异步Filter示例:

csharppublic class AsyncResourceFilter : IAsyncResourceFilter{ public async Task OnResourceExecutedAsync(ResourceExecutedContext context, CancellationToken cancellationToken) { // 请求处理完毕后异步执行 }

public async Task OnResourceExecutingAsync(ResourceExecutingContext context, CancellationToken cancellationToken) { // 请求处理之前异步执行 }}

三、总结.NET Core中的Filter提供了强大的功能,可以灵活地处理HTTP请求和响应。通过使用同步和异步Filter,可以有效地实现缓存、权限验证等需求。

目录
  • 一、简介
  • 二、IResourceFilter(同步资源缓存)
    • 1、定义Filter
  • 三、IAsyncResourceFilter(异步资源缓存)
    • 四、总结

      一、简介

      在.net core 中Filter分为以下六大类:

      • 1、AuthorizeAttribute(权限验证)
      • 2、IResourceFilter(资源缓存)
      • 3、IActionFilter(执行方法前后的记录)
      • 4、IResultFilter(结果生成前后扩展)
      • 5、IAlwaysRun(响应结果的补充)
      • 6、IExceptionFilter(异常处理)

      二、IResourceFilter(同步资源缓存)

      1、定义Filter

      public class CustomerResourceFilterAttribute : Attribute, IResourceFilter { private static Dictionary<string,object> cacheDic=new Dictionary<string, object>(); public void OnResourceExecuting(ResourceExecutingContext context) { var path=context.HttpContext.Request.Path; if (cacheDic.ContainsKey(path)) { context.Result = (IActionResult)cacheDic[path]; } Console.WriteLine("CustomerResourceFilterAttribute.OnResourceExecuting"); } public void OnResourceExecuted(ResourceExecutedContext context) { var path = context.HttpContext.Request.Path; cacheDic[path] = context.Result; Console.WriteLine("CustomerResourceFilterAttribute.OnResourceExecuted"); } }

      2、使用Filter

      public class HomeController : Controller { private readonly ILogger<HomeController> _logger; public HomeController(ILogger<HomeController> logger) { _logger = logger; Console.WriteLine($"执行 {this.GetType().Name} 构造函数"); } [CustomerResourceFilter] public IActionResult Index() { ViewBag.Data = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); return View(); } }

      3、前端页面代码

      @{ ViewData["Title"] = "Home Page"; } <h3>来自于控制器的结果:@ViewBag.Data</h3> <h3>来自于页面的结果:@DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")</h3>

      4、页面效果

      按F5可以看到页面值的变化效果,"来自于控制器的结果"的值会一直不变,“来自于页面的结果”随着页面刷新,值会一直变化

      三、IAsyncResourceFilter(异步资源缓存)

      public class CustomerAsyncResourceFilterAttribute : Attribute, IAsyncResourceFilter { private static Dictionary<string, object> cacheDic = new Dictionary<string, object>(); public async Task OnResourceExecutionAsync(ResourceExecutingContext context, ResourceExecutionDelegate next) { Console.WriteLine("CustomerResourceFilterAttribute.OnResourceExecutionAsync Before"); var path = context.HttpContext.Request.Path; if (cacheDic.ContainsKey(path)) { context.Result = (IActionResult)cacheDic[path]; } else { ResourceExecutedContext resource =await next.Invoke(); cacheDic[path] = resource.Result; // 这句话的执行就是去执行控制器的构造函数+Action Console.WriteLine("CustomerResourceFilterAttribute.OnResourceExecutionAsync After"); } } }

      四、总结

      不管是同步还是异步,他们的执行顺序其实都是一样的,下面是同步和异步分别打印的日志记录:

      1、同步日志

      如何具体实现.Net Core Aop中IResourceFilter接口以实现资源过滤功能?

      2、异步日志

      到此这篇关于.Net Core Aop之IResourceFilter的具体使用的文章就介绍到这了,更多相关.Net Core Aop IResourceFilter内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

      标签:Core

      本文共计925个文字,预计阅读时间需要4分钟。

      如何具体实现.Net Core Aop中IResourceFilter接口以实现资源过滤功能?

      目录

      一、简介

      二、IResourceFilter(同步资源缓存)

      1.定义Filter

      2.IAsyncResourceFilter(异步资源缓存)

      三、总结

      一、简介

      在.NET Core中,Filter是一种用于处理HTTP请求和响应的机制。它可以用于实现权限验证、日志记录、缓存等功能。

      二、IResourceFilter(同步资源缓存)

      1.定义Filter

      同步Filter在请求处理过程中同步执行,它可以在请求到达控制器之前或之后执行。以下是一个简单的同步Filter示例:

      csharppublic class SyncResourceFilter : IResourceFilter{ public void OnResourceExecuted(ResourceExecutedContext context) { // 请求处理完毕后执行 }

      public void OnResourceExecuting(ResourceExecutingContext context) { // 请求处理之前执行 }}

      2. IAsyncResourceFilter(异步资源缓存)异步Filter在请求处理过程中异步执行,它可以在请求到达控制器之前或之后执行。以下是一个简单的异步Filter示例:

      csharppublic class AsyncResourceFilter : IAsyncResourceFilter{ public async Task OnResourceExecutedAsync(ResourceExecutedContext context, CancellationToken cancellationToken) { // 请求处理完毕后异步执行 }

      public async Task OnResourceExecutingAsync(ResourceExecutingContext context, CancellationToken cancellationToken) { // 请求处理之前异步执行 }}

      三、总结.NET Core中的Filter提供了强大的功能,可以灵活地处理HTTP请求和响应。通过使用同步和异步Filter,可以有效地实现缓存、权限验证等需求。

      目录
      • 一、简介
      • 二、IResourceFilter(同步资源缓存)
        • 1、定义Filter
      • 三、IAsyncResourceFilter(异步资源缓存)
        • 四、总结

          一、简介

          在.net core 中Filter分为以下六大类:

          • 1、AuthorizeAttribute(权限验证)
          • 2、IResourceFilter(资源缓存)
          • 3、IActionFilter(执行方法前后的记录)
          • 4、IResultFilter(结果生成前后扩展)
          • 5、IAlwaysRun(响应结果的补充)
          • 6、IExceptionFilter(异常处理)

          二、IResourceFilter(同步资源缓存)

          1、定义Filter

          public class CustomerResourceFilterAttribute : Attribute, IResourceFilter { private static Dictionary<string,object> cacheDic=new Dictionary<string, object>(); public void OnResourceExecuting(ResourceExecutingContext context) { var path=context.HttpContext.Request.Path; if (cacheDic.ContainsKey(path)) { context.Result = (IActionResult)cacheDic[path]; } Console.WriteLine("CustomerResourceFilterAttribute.OnResourceExecuting"); } public void OnResourceExecuted(ResourceExecutedContext context) { var path = context.HttpContext.Request.Path; cacheDic[path] = context.Result; Console.WriteLine("CustomerResourceFilterAttribute.OnResourceExecuted"); } }

          2、使用Filter

          public class HomeController : Controller { private readonly ILogger<HomeController> _logger; public HomeController(ILogger<HomeController> logger) { _logger = logger; Console.WriteLine($"执行 {this.GetType().Name} 构造函数"); } [CustomerResourceFilter] public IActionResult Index() { ViewBag.Data = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); return View(); } }

          3、前端页面代码

          @{ ViewData["Title"] = "Home Page"; } <h3>来自于控制器的结果:@ViewBag.Data</h3> <h3>来自于页面的结果:@DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")</h3>

          4、页面效果

          按F5可以看到页面值的变化效果,"来自于控制器的结果"的值会一直不变,“来自于页面的结果”随着页面刷新,值会一直变化

          三、IAsyncResourceFilter(异步资源缓存)

          public class CustomerAsyncResourceFilterAttribute : Attribute, IAsyncResourceFilter { private static Dictionary<string, object> cacheDic = new Dictionary<string, object>(); public async Task OnResourceExecutionAsync(ResourceExecutingContext context, ResourceExecutionDelegate next) { Console.WriteLine("CustomerResourceFilterAttribute.OnResourceExecutionAsync Before"); var path = context.HttpContext.Request.Path; if (cacheDic.ContainsKey(path)) { context.Result = (IActionResult)cacheDic[path]; } else { ResourceExecutedContext resource =await next.Invoke(); cacheDic[path] = resource.Result; // 这句话的执行就是去执行控制器的构造函数+Action Console.WriteLine("CustomerResourceFilterAttribute.OnResourceExecutionAsync After"); } } }

          四、总结

          不管是同步还是异步,他们的执行顺序其实都是一样的,下面是同步和异步分别打印的日志记录:

          1、同步日志

          如何具体实现.Net Core Aop中IResourceFilter接口以实现资源过滤功能?

          2、异步日志

          到此这篇关于.Net Core Aop之IResourceFilter的具体使用的文章就介绍到这了,更多相关.Net Core Aop IResourceFilter内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

          标签:Core