Ajax 将复杂且大的对象发布到 Web API 控制器非常慢

Posted

技术标签:

【中文标题】Ajax 将复杂且大的对象发布到 Web API 控制器非常慢【英文标题】:Ajax posting a complex and large object to Web API controller is very slow 【发布时间】:2020-08-06 03:55:24 【问题描述】:

我通过 jQuery ajax 将一个结构稍微复杂的大型对象发布到 Web API 控制器方法,但是速度非常慢,请求到达 Web API 控制器方法需要一个多小时。

Application_BeginRequest 方法中获取的内容长度为 27505212。

ajax帖子如下图,

public static Send(request: RequestWrapper) 
    return $.ajax(
        url: 'api/MyController/methodname',
        type: 'POST',
        dataType: 'json',
        data: request
    );

而控制器方法如下图,

    [HttpPost]
    public HttpResponseMessage Send(RequestWrapper request)
    
    

有没有更好/更简单的方法来做到这一点?非常感谢任何建议。

【问题讨论】:

发送更小的结构(fx 没有不必要的数据),使用更好的数据计划(更快的互联网连接)并且可能使用更快的服务器......最终使用与 JSON 不同的东西,而不是那么冗长(二进制格式 fx protobuf ) 【参考方案1】:

27 MB 是一个非常大的 POST 负载。您已经发现有效载荷如何可能太大!

你应该把它分成小得多的块,可能不超过 10-50k。然后您的服务器可以从块中重新组装大对象。如果您使用的是负载平衡的基础架构,那么重组操作将使您的共享会话管理器工作得非常辛苦。

您最好的长期解决方案是重构您的大对象,使其成为数百个较小的对象。您没有告诉我们有关数据结构的任何信息,因此无法就如何做到这一点提供建议。

【讨论】:

同意。我不确定我是否可以显示数据的结构,但是它复杂而深刻。服务器负载均衡。

以上是关于Ajax 将复杂且大的对象发布到 Web API 控制器非常慢的主要内容,如果未能解决你的问题,请参考以下文章

如何将带有附加数据的 FormData 文件发送到 asp.net web api ajax 调用

将ajax中的复杂对象发送到MVC

通过 AJAX 将 JSON 数据发布到 Web API 失败,并显示“无法将 JSON 值转换为 System.Int32”

Ajax新玩法fetch API

将字符串数组发布到 Web API 方法

如何通过ajax调用将多个对象发送到Web方法