百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

还在复制/黏贴?让我们来试看看中间件吧!

cac55 2024-10-11 10:51 18 浏览 0 评论

在ASP.NET Core中,如果有一些通用的预操作,我们应该怎么做呢?

比如有时你可能想要记录传入HTTP请求的详细信息,尤其是请求头。这些信息对于调试、审计或性能分析可能非常有用。

对于这种场景,为了捕获并存储这些信息,我们是创建一个方法,然后每个Controller的方法中调用一下这个预操作方法呢?是否还是有其它更加高效的方法呢?

答案是肯定的,我们可以创建一个中间件组件(middleware)。

什么是中间件组件

如果你对中间件不熟悉,它是一组函数(“请求代理”),作为 ASP.NET Core 应用程序发出的每个请求的一部分,以特定顺序执行。这其实就是责任链设计模式的一个例子。

以下是如何在ASP.NET Core应用程序中创建一个中间件来记录请求头的示例

1. 创建中间件类

首先,我们需要创建一个新的中间件类。这个类应该实现IMiddleware接口,或者更简单地,它可以是一个包含InvokeAsync方法的类,该方法接受HttpContext作为参数。

public class RequestHeaderLoggingMiddleware  
{  
    private readonly RequestDelegate next;  
    private readonly ILogger<RequestHeaderLoggingMiddleware> logger;  
  
    public RequestHeaderLoggingMiddleware(RequestDelegate next, ILogger<RequestHeaderLoggingMiddleware> logger)  
    {  
        this.next = next;  
        this.logger = logger;  
    }  
  
    public async Task InvokeAsync(HttpContext context)  
    {  
        // 记录请求头  
        if (context.Request.Headers != null)  
        {  
            var headers = context.Request.Headers.ToDictionary(entry => entry.Key, entry => string.Join(", ", entry.Value));  
            this.logger.LogInformation("Request Headers: {@Headers}", headers);  
        }  
  
        // 调用管道中的下一个中间件  
        await this.next(context);  
    }  
}

在这个例子中,我们简单地遍历了请求头,并将它们记录为日志信息。我们使用了ILogger<T>来记录日志,这是ASP.NET Core中推荐的日志记录方式。

2. 在Startup.cs中配置中间件

接下来,我们需要在Startup.cs的Configure方法中配置这个中间件。由于我们的RequestHeaderLoggingMiddleware没有直接实现IMiddleware接口,我们需要在Startup.cs中手动配置它。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)  
{  
    // ... 其他配置 ...  
  
    // 添加自定义中间件  
    app.UseMiddleware<RequestHeaderLoggingMiddleware>();  
  
    // ... 其他中间件和路由配置 ...  
    app.UseRouting();  
  
    app.UseEndpoints(endpoints =>  
    {  
        // 配置你的端点  
    });  
}

在这个例子中,我们将RequestHeaderLoggingMiddleware添加到了中间件管道中。由于它是手动添加的,它会在其他通过Use扩展方法添加的中间件之前运行(除非你改变了添加的顺序)。这里很重要的一点是,中间件的注册顺序是很重要了,调整了中间件的注册顺序可能会产生不一样的结果。

3. 验证和查看日志

现在,当你的应用程序接收到HTTP请求时,它应该通过你的中间件并记录请求头。你可以通过查看应用程序的日志输出来验证这一点。具体的日志输出位置取决于你的日志配置(例如,它可能被写入到控制台、文件或远程日志服务中)。

注意事项

  • 在生产环境中记录所有请求头可能会暴露敏感信息,如认证令牌或API密钥。确保你只记录你真正需要的请求头,并考虑在记录之前对它们进行脱敏处理。
  • 考虑到性能影响,不要在中间件中进行昂贵的操作或调用外部服务,除非这是绝对必要的。
  • 使用日志级别(如LogInformation、LogWarning、LogError等)来区分不同重要性的日志条目。这有助于你在查看日志时快速找到关键信息。

写在最后

在 ASP.NET Core 中编写自定义中间件是相当简单的。如果你正在努力弄清楚你的应用程序中发生了什么,请记住这种方法来获取更多信息。另一种你可以尝试的方法是打开 ASP.NET Core 的内置日志记录,但这样你很可能会得到比你需要多得多的信息。这就是为什么我喜欢这个解决方案,因为我只用了几分钟就可以写出这段代码。

好了这就是今天的内容,希望对大家有帮助。你有没有特别喜欢使用的自定义中间件?欢迎大家在评论区和我一起讨论!

#头条创作挑战赛#

相关推荐

博科矩阵新IP网络推动发展OTT服务

近日消息,日本电信服务提供商软银集团正在部署博科VDX交换机,为集团公司通用服务基础架构网络提供以太网矩阵,从而简化数据中心运营。这个新的基础架构将大幅度降低软银数据中心网络运营的复杂度和成本,使该公...

博科SDN战略落地 首款控制器Vyatta面世

ZDNET网络频道10月10日评论消息(文/于泽):虽然软件定义网络(SDN)近两年被炒得很热,但一直属于雷声大雨点小。各网络厂商都声称自家的交换机能够支持OpenFlow协议、实现SDN,不过就...

博科网络矩阵助Skilled Group“时刻在线”

澳大利亚最大的劳动力解决方案提供商SkilledGroup采用博科以太网和光纤通道存储区域网络(SAN)矩阵部署了一个创新的网络,从而打造了一个“时刻在线”的IT基础架构。博科矩阵实现了零停机环境以...

博科基于OpenDaylight推出SDN控制器Vyatta

ZDNET网络频道09月23日编译:博科周一宣布推出Vyatta控制器。Vyatta是博科SDN产品系列中一个新的主打产品。博科表示,Vyatta控制器是一步一步的从OpenDaylight项目中...

浏览器https方式访问博科FC光交显示没有匹配的加密算法套件

浏览器https方式访问博科FC光交显示没有匹配的加密算法套件报错的解决办法。。------------------------------------------------------------...

博科携手VMware推动软件定义数据中心和网络虚拟化的普及

2014年10月14日--博科(NASDAQ:BRCD)今天宣布,公司携手VMware,推出支持新IP的解决方案,以期让企业能够更轻松地迁移到软件定义数据中心(SDDC)和使用网络虚拟化。博科公司...

博科公司为追求速度极致的闪存拥趸提供光纤通道交换机

博科公司已经发布了一款每秒32Gbit第六代光纤通道交换机,这意味着其能够将现有每秒16Gbit连接速度提升一倍。其G620交换机采用1U机箱,提供24到64个端口,据博科方面所言这已经达到当前业...

博科推出第6代交换机 扩大光纤存储地位

博科今天宣布推出业内第一台第6代光纤通道存储网络交换机——博科G620,进一步扩大了博科在光纤通道技术领域的地位。这一全新专用且高密度SAN交换机提供突破性的性能和高可扩展性,旨在支持来自核心应用的数...

微信官宣新功能上线,聊天记录备份、迁移更好用了!

说到手机里哪个App最占空间,很多用户的答案大概都是微信,动辄占用几十甚至上百GB。不仅App本身体积庞大,更主要的是日积月累的聊天记录导致了空间的迅速消耗。此前,释放微信空间的常用方法是将...

局域网沟通工具--BeeBEEP(局域网内部聊天工具)

原文链接:局域网沟通工具--BeeBEEPHello,大家好啊!今天给大家带来一篇关于在信创终端上使用BeeBEEP的文章。BeeBEEP是一款安全、便捷的局域网即时通讯工具,支持文字聊天、文...

企业 IM 即时通讯底座,支持局域网通讯

在数字化浪潮下,企业对即时通讯的需求日益增长,尤其是对通讯安全性、可控性的要求愈发严苛。BeeWorks作为专业的企业IM即时通讯底座,凭借对局域网通讯的支持,为企业打造了优质可控的即时通讯与实...

IM即时通讯软件,构建企业局域网内安全协作

安全与权限:协同办公的企业级保障在协同办公场景中,BeeWorks将安全机制贯穿全流程。文件在局域网内传输与存储时均采用加密处理,企业网盘支持水印预览、离线文档权限回收等功能,防止敏感资料外泄;多人...

当今信息化时代都离不开WLAN, 今天给大家普及一下WLAN知识

无线局域网(WirelessLocalAreaNetworks/WLAN)一.无线让网络使用更自由:1.凡是自由空间均可连接网络,不受限于线缆和端口位置。二.无线让网络建设更经济:1.终端...

软网推荐:寻找WebQQ替代者 在线可以继续聊

不少公司禁止上班聊天,常常采取封禁QQ、关闭端口等方法,导致很多聊天软件无法使用。以前我们可以通过WebQQ绕开限制,不过WebQQ在2019年1月1日开始停止服务,想要继续隐蔽聊天,就只能找其他一些...

搭建自己的聊天室平台、公司内部聊天平台,Rocket.Chat搭建使用

一,简介rocket.chat是一个开源的社交软件,即可以直接在web页面使用,也可以下载APP(Android,IOS,Windows,MacOS)主要功能:群组聊天,直接通信,私聊群,桌面通知...

取消回复欢迎 发表评论: