ZhouliProject/Zhouli.Common/Middleware/LogReqResponseMiddleware.cs

(开头部分) 3KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Zhouli.Common.Middleware
{
    /// <summary>
    /// 请求记录中间件
    /// </summary>
    public class LogReqResponseMiddleware
    {
        private readonly RequestDelegate _next;
        private SortedDictionary<string, object> _data;
        private Stopwatch _stopwatch;
        public LogReqResponseMiddleware(RequestDelegate next)
        {
            _next = next;
            _stopwatch = new Stopwatch();
        }
        public async Task Invoke(HttpContext context)
        {
            var strAccept = context.Request.Headers["Accept"].ToString().ToLower();
            if (strAccept.Contains("image") || strAccept.Contains("html") || strAccept.Contains("css"))
            {
                await _next(context);
                return;
            }
            var strRequestUrl = $"{context.Request.Scheme}://{context.Request.Host}{context.Request.Path}{context.Request.QueryString}";
            if (strRequestUrl.Contains(".js") || strRequestUrl.Contains(".html") || strRequestUrl.Contains(".css"))
            {
                await _next(context);
                return;
            }
            context.Request.EnableBuffering();
            _stopwatch.Restart();
            _data = new SortedDictionary<string, object>();
            var requestReader = new StreamReader(context.Request.Body);
            var requestContent = requestReader.ReadToEnd();
            //记录请求信息
            _data.Add("request.url", strRequestUrl);
            _data.Add("request.headers", context.Request.Headers.ToDictionary(x => x.Key, v => string.Join(";", v.Value.ToList())));
            _data.Add("request.method", context.Request.Method);
            _data.Add("request.executeStartTime", DateTimeOffset.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
            _data.Add("request.body", requestContent);
            context.Request.Body.Position = 0;
            var originalBodyStream = context.Response.Body;
            using (var responseBody = new MemoryStream())
            {
                context.Response.Body = responseBody;
                await _next(context);
                var response = context.Response;
                response.Body.Seek(0, SeekOrigin.Begin);
                //转化为字符串
后面还有 30 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。