【问题标题】:Maximal size length of WebAPI response on ASP.NET Core 3.0ASP.NET Core 3.0 上 Web API 响应的最大长度
【发布时间】:2021-04-22 13:58:04
【问题描述】:

我的控制器的一个操作在 JSON 响应中返回大量集合,当我向此控制器 WebAPI 发出请求时,不返回响应。所以我已经使用断点测试了这个动作,并且集合被正常填充。最后,我确信这是 WebApi 的问题,因为我已经通过几个客户端(WPF 和 Postman)测试了这个控制器的操作,每个客户端都在等待响应。我认为障碍是我的 WebAPI 的响应大小。我的 WebAPI 在 IIS Express 上运行

所以我有两个问题:

1)。 ASP.NET Core 3.0 上 WebAPI 响应的最大长度是多少?
2)。如何在 ASP.NET Core 3.0 上增加 WebAPI 响应的最大长度?

【问题讨论】:

  • 响应应该被缓冲。当您通过浏览器执行此请求时,您是否看到该请求处于待处理状态或已完成。如果待处理,请留下它,并在它完成时留下。因此,即使您增加最大尺寸,我认为您的问题也不会解决。我建议采用分页方法从 API 返回数据。
  • 你好@user1672994。当我通过任何客户端甚至浏览器进行请求时,它会在挂起状态下停止并且不会完成,因此我无法收到响应。有什么想法吗?
  • @AllaevBekzod 我的想法是先尝试响应一小段数据,看看您是否真的能得到响应。如果您无法控制服务器端代码(用于调试),那么您就走运了。
  • 你好@KingKing。我等待收集订单详细信息(我使用 Northwind 数据库)。订单详情模型有两个导航属性。所以我尝试了另一种方法,我只包含了一个导航属性。当我这样做时,我收到了回复,但是当我包含两个导航属性时,我上面描述的事情发生了。所以最后是的,我实际上得到了回应。您对此有何看法?
  • @AllaevBekzod 从外部请求可能有一些中断(某种断开连接),因此为了获得最可靠的洞察力,您可以直接在服务器端调试代码。我的意思是您可以在服务/api 调用的开始和结束时设置一些断点并在那里等待(从第一个断点转到第二个断点)。如果它似乎需要永远,那是您的服务器代码问题(尚未涉及最大长度配置)。

标签: c# asp.net-core httpresponse iis-express webapi


【解决方案1】:

根据文档。默认响应缓冲区大小为 64KB。看看here

你可以改变它:

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
      WebHost.CreateDefaultBuilder(args).ConfigureKestrel(x => x.Limits.MaxResponseBufferSize = yourSize)
          .UseStartup<Startup>();

【讨论】:

  • 如果在 Kestrel 上运行我的 WebAPI,看起来它是最大长度。如果我在 IIS Express 上运行我的 WebAPI,我应该写什么代码?附言抱歉没有提到我在 IIS Express 上运行我的 WebAPI,我将编辑问题)
【解决方案2】:

我来这里是为了寻找相同问题的解决方案,但对我来说,这并没有通过更改 MaxResponseBufferSize 来解决。

事实证明,Postman 似乎也返回了同样的错误,因为可以配置最大大小,默认为 50Mb。

在 Postman 应用程序中,您可以转到设置,并将其配置为 0(无限制)或您需要的任何值。

【讨论】:

    猜你喜欢
    • 2018-04-23
    • 1970-01-01
    • 2018-02-08
    • 2021-06-29
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    相关资源
    最近更新 更多