北极熊怕冷 2024-03-01 11:39 采纳率: 0%
浏览 43

Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException: Unexpected end of request content.

.net项目部署在windows服务器IIS是正常的,部署在Linux服务器就会偶尔出现报错。

报错信息:
Microsoft.AspNetCore.Server.Kestrel [(null)] - Connection id "0HN1ORVEQ567R", Request id "0HN1ORVEQ567R:00000014": An unhandled exception was thrown by the application.
Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException: Unexpected end of request content.

请问一下大家有遇到这种情况吗?

img

  • 写回答

2条回答 默认 最新

  • Kwan的解忧杂货铺 Java领域优质创作者 2024-03-01 11:40
    关注

    北极熊怕冷 上午好☀️☀️☀️️
    本答案参考通义千问

    问题: 在使用Microsoft.AspNetCore.Server.Kestrel.Core时,Windows服务器上的.NET项目部署正常,但在Linux服务器上偶尔会遇到BadHttpRequestException: Unexpected end of request content的错误。这是由于请求内容在预期之外结束导致的。

    原因

    1. 编码/格式问题:请求的内容可能没有正确地发送或解析,可能是客户端(如浏览器)的问题,或者是网络传输过程中数据丢失。
    2. 超时设置:Linux服务器的超时设置可能与Windows不同,导致某些请求在Linux上无法及时完成。
    3. 服务器配置:Linux服务器上的Kestrel配置可能存在差异,比如连接池设置、请求限制等。

    解决方案

    1. 检查请求头
      • 确保请求头中的Content-TypeContent-Length字段正确,对于POST或PUT请求,需要包含实际发送的数据。
      // 示例:设置正确的Content-Type和Content-Length
      var builder = new ConfigurationBuilder()
          .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
          .AddEnvironmentVariables();
      var config = builder.Build();
      var contentType = config["Request.ContentType"] ?? "application/json";
      services.AddControllers(options =>
      {
          options.ModelBinderProviders.Insert(0, new JsonModelBinderProvider());
          options.InputFormatters.Insert(0, new JsonInputFormatter());
          options.OutputFormatters.Insert(0, new JsonOutputFormatter());
          options.FormatterMappings.SetDefaultContentType(contentType);
      });
      
    2. 调整超时设置
      • 在Kestrel的配置文件中,检查ConnectionManagerOptions下的MaxConnectionIdleTimeoutMaxConnectionLifeTime,确保它们适合你的应用程序需求。
      Kestrel:
        ConnectionManager:
          MaxConnectionIdleTimeout: 00:01:00
          MaxConnectionLifeTime: 00:05:00
      
    3. 检查服务器日志
      • 查看Linux服务器的日志文件,了解是否有其他异常信息,有助于定位问题。
    4. 启用调试模式
      • 如果可能,在部署到生产环境之前,在开发或测试环境中启用Kestrel的调试模式来获取更详细的错误信息。
      app.UseDeveloperExceptionPage();
      
    5. 增加错误处理
      • 在代码中添加适当的异常处理,捕获BadHttpRequestException并记录详细的错误信息。
      try
      {
          await _service.ProcessRequest(request);
      }
      catch (BadHttpRequestException ex)
      {
          logger.LogError(ex, "Unexpected end of request content.");
          // 返回错误响应或记录错误
      }
      

    请根据实际情况检查和调整上述设置,以解决Linux服务器上的异常。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月1日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。