You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core Minimal API中${aspnet-request-posted-body}日志配置无效求助

问题解决:Minimal API中NLog记录请求体与屏蔽指定日志

一、解决${aspnet-request-posted-body}为空的问题

核心原因:中间件顺序错误 + 请求体读取限制

ASP.NET Core中请求体默认仅能读取一次,NLogRequestPostedBodyMiddleware必须在路由映射(app.MapXXX)之前注册,否则请求体已被后续端点读取,中间件无法捕获。同时需确保请求满足:

  • 请求方法为POST/PUT/PATCH等带请求体的类型
  • 请求Content-Type为application/json、application/x-www-form-urlencoded等可解析格式

修正后的Program.cs代码

var logger = LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger();
logger.Debug("Init main...");

// NLog: Setup NLog for Dependency injection
builder.Logging.ClearProviders();
builder.Logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
builder.Host.UseNLog();

// 关键:必须在app.MapXXX之前注册NLog请求体中间件
app.UseMiddleware<NLogRequestPostedBodyMiddleware>();

// 你的Minimal API路由映射(示例)
app.MapPost("/api/test", (HttpContext context) => {
    logger.Info("Received request");
    return Results.Ok();
});

app.Run();

额外配置检查

  1. 确认NLog.Web.AspNetCore版本≥5.1.0,可通过NuGet包管理器查看
  2. 若需记录大请求体,可在中间件注册时配置最大缓存大小:
app.UseMiddleware<NLogRequestPostedBodyMiddleware>(new NLogRequestPostedBodyOptions { MaxBodySize = 1024 * 1024 }); // 1MB

二、屏蔽Microsoft.Hosting.Lifetime日志

方案1:通过NLog配置直接过滤

在appsettings.json的NLog规则中添加优先匹配的拒绝规则,利用final: true阻止后续规则处理该日志:

"NLog": {
    "autoReload": true,
    "throwConfigExceptions": true,
    "internalLogLevel": "Info",
    "internalLogFile": "${basedir}/internal-nlog.txt",
    
    "targets": { /* 保持原有配置不变 */ },
    "rules": [
      // 新增:屏蔽Microsoft.Hosting.Lifetime的所有日志
      {
        "logger": "Microsoft.Hosting.Lifetime",
        "minLevel": "Trace",
        "final": true,
        "writeTo": ""
      },
      // 原有规则
      {
        "logger": "*",
        "minLevel": "Info",
        "writeTo": "reqlogfile"
      },
      {
        "logger": "*",
        "minLevel": "Info",
        "writeTo": "reqlogconsole"
      }
    ]
  }

方案2:通过Logging配置过滤

在appsettings.json的Logging节点中直接设置该日志类别为None:

"Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.Hosting.Lifetime": "None"
    }
  }

内容的提问来源于stack exchange,提问作者frozzen10

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 11:22:10