首页 新闻 会员 周边 捐助

ASP.NET Core 应用日志中出现很多 "Unexpected end of request content" 错误

0
悬赏园豆:30 [待解决问题]

用的是 ASP.NET Core 9.0,出现这个错误的是下面这个 Controller Action

public class EventController : ApiControllerBase
{
    [HttpPost]
    public async Task<IActionResult> ReportEventAsync([FromBody] EventDto reportedEvent)
    {
        // ...
    }
}

详细的异常信息如下

Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException: Unexpected end of request content.
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.Http1ContentLengthMessageBody.ReadAsyncInternal(CancellationToken cancellationToken)
   at System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1.StateMachineBox`1.System.Threading.Tasks.Sources.IValueTaskSource<TResult>.GetResult(Int16 token)
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpRequestStream.ReadAsyncInternal(Memory`1 destination, CancellationToken cancellationToken)
   at System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1.StateMachineBox`1.System.Threading.Tasks.Sources.IValueTaskSource<TResult>.GetResult(Int16 token)
   at System.Text.Json.Serialization.ReadBufferState.ReadFromStreamAsync(Stream utf8Json, CancellationToken cancellationToken, Boolean fillBuffer)
   at System.Text.Json.Serialization.Metadata.JsonTypeInfo`1.DeserializeAsync(Stream utf8Json, CancellationToken cancellationToken)
   at System.Text.Json.Serialization.Metadata.JsonTypeInfo`1.DeserializeAsObjectAsync(Stream utf8Json, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Mvc.Formatters.SystemTextJsonInputFormatter.ReadRequestBodyAsync(InputFormatterContext context, Encoding encoding)
   at Microsoft.AspNetCore.Mvc.Formatters.SystemTextJsonInputFormatter.ReadRequestBodyAsync(InputFormatterContext context, Encoding encoding)
   at Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BodyModelBinder.BindModelAsync(ModelBindingContext bindingContext)
   at Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder.BindModelAsync(ActionContext actionContext, IModelBinder modelBinder, IValueProvider valueProvider, ParameterDescriptor parameter, ModelMetadata metadata, Object value, Object container)
   at Microsoft.AspNetCore.Mvc.Controllers.ControllerBinderDelegateProvider.<>c__DisplayClass0_0.<<CreateBinderDelegate>g__Bind|0>d.MoveNext()
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
   at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application)

请问如何消除或者忽略这个异常?

问题补充:

github 上的相关 issue https://github.com/dotnet/aspnetcore/issues/23949

dudu的主页 dudu | 高人七级 | 园豆:24691
提问于:2025-08-26 11:32
< >
分享
所有回答(3)
0

是不是 请求体被提前使用了 没有复位导致框架[Frombody]为空了啊

摸鱼w | 园豆:444 (菜鸟二级) | 2025-08-26 11:46

前面没有我们自己实现的处理代码

支持(0) 反对(0) dudu | 园豆:24691 (高人七级) | 2025-08-26 13:23
0

先临时通过设置更高的日志级别忽略了

{ 
  "Serilog": {
      "MinimumLevel": {
        "Default": "Warning",
        "Override": {
          "Microsoft.AspNetCore.Server.Kestrel": "Fatal"
        }
      }
    }
}
dudu | 园豆:24691 (高人七级) | 2025-08-26 13:32
0

在 appsettings.Development.json 或 appsettings.Production.json 中:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning",
      "Microsoft.AspNetCore.Server.Kestrel": "Information" // 将 Kestrel 的默认错误级别降低
    },
    "Console": {
      "LogLevel": {
        "Default": "Information",
        "Microsoft.AspNetCore.Server.Kestrel": "Information" 
      },
      "FilterOptions": {
        "Filters": [
          {
            "CategoryName": "Microsoft.AspNetCore.Server.Kestrel",
            "LogLevel": "Information",
            "ProviderName": "Console",
            "Filter": (logEntry) => {
              // 注意:这个 lambda 语法在 appsettings.json 中无法直接使用。
              // 实际配置需要通过代码或第三方库实现这种复杂过滤。
              // 这表明了其复杂性。
              return !logEntry.Exception?.Message.Contains("Unexpected end of request content") ?? true;
            }
          }
        ]
      }
    }
  }
}

 

张朋举 | 园豆:2060 (老鸟四级) | 2025-09-03 20:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册