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 积分,解读结果公开显示在下面。
还没有人解读过这个文件。
