src/DotNetCommon.Web/Middlewares/RequestStatisticMiddleware.cs

(开头部分) 3KB

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

using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace DotNetCommon.Web.Middlewares
{
    /// <summary>
    /// 访问统计中间件
    /// </summary>
    public class RequestStatisticMiddleware
    {
        private readonly RequestDelegate next;
        private readonly ILogger<RequestStatisticMiddleware> logger;

        /// <summary>
        /// 构造函数只在构建请求管道的时候调用一次,不是每个请求都创建一次
        /// </summary>
        /// <param name="next"></param>
        /// <param name="logger"></param>
        public RequestStatisticMiddleware(RequestDelegate next, ILogger<RequestStatisticMiddleware> logger)
        {
            this.next = next;
            this.logger = logger;
        }

        private static long RunningCounter = 0;
        private static long TotalCounter = 0;

        /// <summary>
        /// override
        /// </summary>
        /// <param name="ctx"></param>
        /// <returns></returns>
        public async Task InvokeAsync(HttpContext ctx)
        {
            var count = Interlocked.Increment(ref RunningCounter);
            var totalCount = Interlocked.Increment(ref TotalCounter);
            var st = new Stopwatch();
            st.Start();
            var requestInfo = $@"第{totalCount}个请求 当前并发:{count} 接收请求:{ctx.Request.Scheme}://{ctx.Request.Host}{ ctx.Request.Path}{ctx.Request.QueryString} 
     Method: {ctx.Request.Method}
     UA: {ctx.Request.Headers["User-Agent"]}
     Referer: {ctx.Request.Headers["Referer"]}
     Host: {ctx.Request.Host}
     Content-Type: {ctx.Request.ContentType}
     Content-Length: {ctx.Request.ContentLength} {(ctx.Request.ContentLength != null ? "约" + Math.Round((ctx.Request.ContentLength.Value / 1024.0), 2) + "KB" : "")}
     Client: {ctx.Connection.RemoteIpAddress}:{ctx.Connection.RemotePort}";
            try
            {
                await next(ctx);
                var counter2 = Interlocked.Decrement(ref RunningCounter);
                totalCount = Interlocked.Read(ref TotalCounter);
                st.Stop();
                var responseInfo = $@"

后面还有 38 行代码,解锁后查看完整代码

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

AI 解读

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

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