小编Ili*_*dis的帖子

在 ASP.Net Core 3.1 API 中记录响应正文

最近我开始为我工作的公司开发一个 API。经过一些研究,我们最终使用 NLog 作为日志记录库,它有一个布局渲染器用于记录发布的请求正文,所以这很好。但是,还需要记录响应、处理和返回请求所花费的时间(因为它也会被第 3 方供应商消耗,通常它与其中一些供应商的方式是: -我单击了事情。-嗯,不,你没有)。

现在,我这些天读了很多关于中间件日志记录的内容,但有些帖子已经过时了,有些解决方案只能部分工作(查看开发人员页面时出现问题),在 github 的某个地方,我读到记录响应是不好的做法,因为它可以包含敏感数据。也许我缺少诸如遥测之类的东西?

感谢您的时间和帮助,并对我的咆哮表示歉意,在无休止的阅读测试之后,我仍然感到很焦灼。

我已经尝试过什么以及当前的问题是什么。context.Response.Body 的问题在于它是一个不可读但可写的流。为了读取它,必须将其分配给另一个流,然后将新的可读流分配给.Body,然后允许它继续到控制器,读取返回的流并将其复制回.Body。

示例中间件类。(致谢: jarz.net | 日志记录中间件

    public class LoggingMiddleware
        {
            private readonly RequestDelegate _next;
            private readonly ILogger<LoggingMiddleware> _logger;
    
            public LoggingMiddleware(RequestDelegate next, ILogger<LoggingMiddleware> logger)
            {
                _logger = logger;
                _next = next;
            }
    
            public async Task Invoke(HttpContext context)
            {
                if (_logger.IsEnabled(LogLevel.Trace))
                {
                    string responseBodyString = string.Empty;
    
                    try
                    {
                        // Swap the original Response.Body stream with one we can read / seek
                        Stream originalResponseBody = context.Response.Body;
                        using MemoryStream replacementResponseBody = new …
Run Code Online (Sandbox Code Playgroud)

c# middleware asp.net-core

2
推荐指数
1
解决办法
1万
查看次数

标签 统计

asp.net-core ×1

c# ×1

middleware ×1