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

相关文章

  • 什么是云计算,及其原理

    什么是云计算,及其原理 基本原理和概念   云计算(Cloud Computing)是分布式处理(Distributed Computing)、并行处理(Parallel Computing)和网格计算(Grid Computing)的发展,或者说是这些计算机科学概念的商业实现。   云计算的基本原理是,通过使计算分布在大量的分布式计算机上,而非本地计算机或…

    云计算 2023年4月12日
    00
  • 使用C#处理WebBrowser控件在不同域名中的跨域问题

    在WebBrowser控件中访问跨域资源时,由于同源策略的限制,可能会出现不能正常访问的问题。下面是使用C#处理WebBrowser控件跨域问题的攻略: 一、跨域问题的原因 WebBrowser控件是基于IE内核的控件,当访问不同域名的网页时,浏览器会根据同源策略的规则阻止页面进行跨域访问,造成无法正常访问。这是由于安全问题引起的,为了避免恶意网站获取其他域…

    云计算 2023年5月17日
    00
  • 初窥Google网站的服务器基本架构

    下面是详细的讲解,分为以下几个部分: 1. 了解Google的基本架构 Google作为全球最大的搜索引擎之一,拥有着复杂的服务器基础架构,包括: 数据中心:Google公司在世界各地都有多个数据中心,这些数据中心之间相互连接,构成了一个巨大的全球网络。 员工端:员工在办公室中使用的电脑和系统,他们的操作和员工之间的合作也会影响到网站的运营和服务器的运转。 …

    云计算 2023年5月18日
    00
  • 全部满分!阿里云函数计算通过可信云21项测试

    简介: 在未来,无论是一方云服务,还是三方应用,所有事件都可被函数计算等服务可靠地处理。 今日,“2020 可信云线上峰会”正式召开。会上,中国信通院公布了混合云安全、云组网、函数即服务、消息队列、云计算安全运营中心等首次评估结果。阿里云函数计算通过了基础能力要求、平台可观测能力、服务性能、服务安全和服务计量准确性等 21 项测试,最终以满分成绩通过可信云函…

    云计算 2023年4月12日
    00
  • Win10 Cloud首波截图曝光 附镜像下载地址

    Win10 Cloud首波截图曝光 附镜像下载地址 Win10 Cloud是微软推出的一款轻量级操作系统,旨在提供更快、更安全、更稳定的操作系统体验。Win10 Cloud的首波截图已经曝光,下面是一些Win10 Cloud的攻略,包括Win10 Cloud的特点、下载地址等。 1. Win10 Cloud的特点 Win10 Cloud是一款轻量级操作系统,…

    云计算 2023年5月16日
    00
  • 交通银行系统运维服务云计算案例分享

    本文讲的是交通银行系统运维服务云计算案例分享,2012年5月23—25日,主题为“发挥示范引领作用,推动云计算创新实践”的“第四届中国云计算大会”在北京国家会议中心召开。大会将举办七个专题论坛,围绕云计算核心技术架构、云计算与大数据、云计算平台与应用实践、云计算时代的信息安全、云计算数据中心、云计算存储与虚拟化、云计算与移动互联网及新型终端等主题进行深入探讨…

    云计算 2023年4月13日
    00
  • 用Docker作为PaaS的替代方案是否完美无缺

    用Docker作为PaaS的替代方案是否完美无缺 Docker是一种轻量级的容器化技术,可以将应用程序和其依赖项打包到一个容器中,从而实现跨平台、可移植和可重复部署。PaaS(平台即服务)是一种云计算服务模型,可以提供应用程序开发、测试、部署和管理等服务。在某些情况下,Docker可以作为PaaS的替代方案,但是它是否完美无缺呢?下面是一些攻略,包括Dock…

    云计算 2023年5月16日
    00
  • iOS中设置网络超时时间+模拟的方法详解

    iOS中设置网络超时时间+模拟的方法详解 在iOS开发中,我们经常需要设置网络请求的超时时间,以确保应用程序的稳定性和可靠性。本文将提供一个完整的攻略,包括如何设置网络超时时间和如何模拟网络请求的过程。 设置网络超时时间 在iOS中,我们可以使用NSURLSession来设置网络请求的超时时间。以下是一个示例说明,演示如何设置网络超时时间: let sess…

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