.NET 6开发TodoList应用之实现ActionFilter

下面是“.NET 6开发TodoList应用之实现ActionFilter”的完整攻略。

前言

在Web应用的开发中,ActionFilter 可以帮助我们在请求流程中执行一些共享的逻辑,例如,身份验证、日志记录、全局异常处理等等。使用ActionFilter 可以将这些逻辑隔离到一个独立的类中,使得各个控制器方法之间耦合度更低,代码复用更高效。

在后续的示例中,我们将演示如何通过实现一个ActionFilter来给TodoList增加一个“TRACE”功能。

实现步骤

创建ActionFilter类

在项目中创建一个新的类文件,例如,我们可以创建一个名为TraceActionFilter.cs的类,这个类继承自IActionFilter。下面是示例代码:

using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Logging;
using System.Diagnostics;

namespace TodoListWebApp.ActionFilters
{
    public class TraceActionFilter : IActionFilter
    {
        private readonly ILogger<TraceActionFilter> logger;

        public TraceActionFilter(ILogger<TraceActionFilter> logger)
        {
            this.logger = logger;
        }

        public void OnActionExecuting(ActionExecutingContext context)
        {
            logger.LogInformation($"Action {context.ActionDescriptor.DisplayName} start executing");
            context.HttpContext.Items.Add("Stopwatch", Stopwatch.StartNew());
        }

        public void OnActionExecuted(ActionExecutedContext context)
        {
            var stopwatch = (Stopwatch)context.HttpContext.Items["Stopwatch"];
            stopwatch.Stop();
            logger.LogInformation($"Action {context.ActionDescriptor.DisplayName} finished executing in {stopwatch.ElapsedMilliseconds}ms");
        }
    }
}

代码解释:

  • 首先,我们在构造函数中注入了一个ILogger实例,用于日志的记录;
  • 在OnActionExecuting方法中,我们使用ILogger记录Action方法开始执行;
  • 我们使用HttpContext.Items字典存储一个StopWatch,
  • 然后在OnActionExecuted方法中,我们获取StopWatch并停止计时,
  • 然后记录Action方法执行的时间。

注册ActionFilter

我们需要将此ActionFilter注册到Startup.cs中。其中使用services.AddScoped<>()方法,将其添加到DI容器中:

services.AddScoped<TraceActionFilter>(); 

然后我们在Configure方法中,使用MapControllerRoute方法让全局应用该ActionFilter:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller}/{action}/{id?}",
        defaults: new { controller = "Home", action = "Index" })
        .RequireAuthorization()
        .WithMetadata(new TraceActionFilter());
});

在示例中,我们需要全局对TodoList应用启用ActionFilter,因此我们给MapControllerRoute方法添加了WithMetadata方法,该方法会应用指定的ActionFilter。

应用ActionFilter

在需要应用ActionFilter的Controller或method上增加特性,例如在TodoListsController的GetAll方法上应用我们实现的TraceActionFilter就可以了:

[HttpGet]
[TraceActionFilter]
public async Task<ActionResult<IEnumerable<TodoItem>>> GetAll()
{
    var todoItems = await todoItemService.GetTodoItemsAsync();
    return Ok(todoItems);
}

运行应用

现在我们可以使用Postman或Fiddler等工具来模拟HTTP请求访问我们的TodoList应用。当我们访问GetAll方法时,我们就可以在应用的日志中看到类似以下的输出:

info: TodoListWebApp.ActionFilters.TraceActionFilter[0]
      Action TodoListsController.GetAll start executing
info: TodoListWebApp.ActionFilters.TraceActionFilter[0]
      Action TodoListsController.GetAll finished executing in 60ms

在以上输出中,我们可以看到我们的TraceActionFilter输出了Action方法开始执行和完成执行的日志,并且在完成执行时,输出了Action执行的时间。

示例说明

在实现ActionFilter意味着我们可以很方便地执行各种共享的逻辑。例如,我们在上述示例中实现的TraceActionFilter可以方便地增加跟踪Action执行时间的功能;我们也可以实现身份验证逻辑,添加数据缓存,全局异常处理等等。ActionFilter可以帮助我们使控制器代码保持最佳实践,同时也方便了代码复用和维护。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:.NET 6开发TodoList应用之实现ActionFilter - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • 云计算被视为继大型计算机、个人计算机、互联网之后的第4次IT产业革命,顺应了当前各行业整合计算资源和服务能力的要求(转)

      云计算被视为继大型计算机、个人计算机、互联网之后的第4次IT产业革命,顺应了当前各行业整合计算资源和服务能力的要求,成为引领当今世界信息技术变革的主力军。越来越多的金融企业认识到只有与云计算结合,才能更好地支持业务发展和创新。本文将结合阿里金融云的特性,讲述券商IT系统上云的最佳实战经验。   阿里金融云于2013年底正式上线,主要面向银行、证券、基金、…

    云计算 2023年4月11日
    00
  • 国内外云计算安全相关认证大搜罗 – 微言晓意

    国内外云计算安全相关认证大搜罗 2020-08-02 20:44 微言晓意 阅读(431) 评论(0) 编辑 收藏 举报 随着云计算的出现,云存储、云服务的广泛应用,云安全相关标准及认证也快速发展。近些年来,很多组织陆续推出了一些云安全相关标准,与此同时,一些机构也推广云安全相关认证服务。本文将主要的云安全相关测评认证进行一个简单介绍。 1、德国可信云计算认…

    云计算 2023年4月9日
    00
  • python 爬取京东指定商品评论并进行情感分析

    下面我将详细讲解“Python 爬取京东指定商品评论并进行情感分析”的完整攻略。 一、准备工作 在进行爬取京东评论之前,我们需要准备以下工具和库: Python 3.x版本 Requests库 BeautifulSoup库 SNownlp库 其中,Requests库和BeautifulSoup库分别用来进行网页数据的爬取和解析,SNownlp库是用来进行情感…

    云计算 2023年5月18日
    00
  • Python pyecharts案例超市4年数据可视化分析

    下面我将为您详细讲解“Python pyecharts案例超市4年数据可视化分析”的完整攻略,包括环境安装、数据分析及可视化呈现。 环境准备 首先需要安装Python以及相关的库和工具,包括numpy、pandas、matplotlib和pyecharts等。 其中numpy、pandas、matplotlib可以通过pip命令进行安装,而pyecharts…

    云计算 2023年5月18日
    00
  • 分享python中matplotlib指定绘图颜色的八种方式

    让我来介绍一下“分享python中matplotlib指定绘图颜色的八种方式”的攻略。 1. 使用预定义的字符表示颜色 matplotlib提供了一个预先定义好的字符列表,可以用来表示常见的颜色。例如,字符’b’表示蓝色,’g’表示绿色,’r’表示红色,’k’表示黑色等等。在绘图函数的参数中指定对应的字符,就可以使用对应的颜色。 import matplot…

    云计算 2023年5月18日
    00
  • Python图像处理之图像与视频处理基础教程

    Python图像处理之图像与视频处理基础教程 是一份很好的学习资料,它帮助人们快速入门图像和视频处理领域。这里是一份完整的攻略,帮助你更好地了解这份教程。 准备工作 在学习 Python图像处理之图像与视频处理基础教程 前,需要做好以下准备工作: 安装Python 在学习图像和视频处理方面,我们需要使用Python 3.x版本。可以从Pyython官网下载相…

    云计算 2023年5月18日
    00
  • 如何借助 OVN 来提高 OVS 在云计算环境中的性能

    众所周知,OpenvSwitch 以其丰富的功能和不错的性能,已经成为 Openstack 部署中最受欢迎的虚拟交换机。由于 Openstack Neutron 的架构引入了一些性能问题,比如 neutron-server 要与非常多的 agent 通信,RPC 就是一个性能瓶颈,还有 neutron 里面用到非常多的 namespace,namespace…

    云计算 2023年4月10日
    00
  • 如何使用pm2守护你的.NET Core应用程序详解

    如何使用pm2守护你的.NET Core应用程序详解 概述 PM2是一个流行的Node.js应用程序管理器,但它也可以用来监控和管理任何类型的应用程序,包括.NET Core应用程序。PM2拥有自动提供故障恢复、负载均衡机制、进程守护等功能,并且可以通过PM2管理的CLI,轻松地实现任务的启动、停止和重启。 为了演示如何使用PM2来监控和管理.NET Cor…

    云计算 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部