Postman ASP.NETCore2.0API响应因json负载过大而挂起

Postman ASP.NETCore2.0API响应因json负载过大而挂起,postman,asp.net-core-2.0,httpresponse,Postman,Asp.net Core 2.0,Httpresponse,我正在开发一个ASP NETCore2.0WebAPI。我的一个端点返回一个json对象,其中包含一个相当大的文本字段。当该字段的大小约为10Mb时,控制器将停止,直到达到超时。当我调试时,我看到json对象是在我的业务逻辑中创建的,并传递给端点控制器,但控制器在接收到json对象后立即停止,没有错误,并且直到请求最终超时后才返回调用方。我将requestTimeout增加到20分钟,即使业务逻辑在不到2分钟的时间内生成json对象。它将一直挂起,直到达到20分钟超时 这是我的控制器动作 [示例

我正在开发一个ASP NETCore2.0WebAPI。我的一个端点返回一个json对象,其中包含一个相当大的文本字段。当该字段的大小约为10Mb时,控制器将停止,直到达到超时。当我调试时,我看到json对象是在我的业务逻辑中创建的,并传递给端点控制器,但控制器在接收到json对象后立即停止,没有错误,并且直到请求最终超时后才返回调用方。我将requestTimeout增加到20分钟,即使业务逻辑在不到2分钟的时间内生成json对象。它将一直挂起,直到达到20分钟超时

这是我的控制器动作

[示例1]

    [HttpGet(Name = "GetFile")]
    public async Task<FileResponseDto> GetFile([FromRoute] int companyId, [FromRoute] int siteId, [FromRoute] int FileId, 
        [FromHeader(Name = "Accept")] string mediaType, CancellationToken cancellationToken)
    {
        var fileResponseDto = _fileBll.GetFile(companyId, siteId, fileId, HttpContext);

        // This is the point where the controller appears to hang

        return await Task.Factory.StartNew(() => fileResponseDto, cancellationToken);

    }
大字符串的属性是FileResponseDto类中的ProcessingFile属性

直到我的ProcessingFile属性达到大约30K行(大约10Mb),然后控制器在完成该行后挂起,这一切都很正常

var fileResponseDto = _fileBll.GetFile(companyId, siteId, fileId, HttpContext);
此时,我的假设是json对象的大小受到了一些限制。所以,为了测试,我改变了我的控制器,让它返回一个文件,如下所示

[示例2]

    [HttpGet(Name = "GetFile")]
    public async Task<FileContentResults> GetFile([FromRoute] int companyId, [FromRoute] int siteId, [FromRoute] int fileId, 
        [FromHeader(Name = "Accept")] string mediaType, CancellationToken cancellationToken)
    {
        var fileResponseDto = _fileBll.GetFile(companyId, siteId, fileId, HttpContext);

        var outputFile = Encoding.ASCII.GetBytes(fileResponseDto.ProcessingFile);

        return await Task.Factory.StartNew(() =>
            new FileContentResult(outputFile, new MediaTypeHeaderValue(MediaTypeNames.Application.Octet))
            {
                FileDownloadName = fileResponseDto.Filename
            }, cancellationToken);

    }
[HttpGet(Name=“GetFile”)]
公共异步任务GetFile([FromRoute]int companyId,[FromRoute]int siteId,[FromRoute]int fileId,
[FromHeader(Name=“Accept”)]字符串媒体类型,CancellationToken CancellationToken)
{
var fileResponseDto=\u fileBll.GetFile(companyId、siteId、fileId、HttpContext);
var outputFile=Encoding.ASCII.GetBytes(fileResponseDto.ProcessingFile);
return wait Task.Factory.StartNew(()=>
新的FileContentResult(输出文件,新的MediaTypeHeaderValue(MediaTypeNames.Application.Octet))
{
FileDownloadName=fileResponseDto.Filename
},取消令牌);
}
如果我在“邮递员”中选择“发送和下载”,我可以收到一个文件下载对话框弹出窗口和一个成功的文件

因此,这让我相信,在第一个示例中,与正在传输的json对象有关的大小

然而,在这个问题上,网络搜索并没有发现任何有用的东西,这让我觉得我可能遗漏了一些东西

我确实找到了,并用

var outfileJson = JsonConvert.SerializeObject<fileResponseDto>;
var outfileJson=JsonConvert.SerializeObject;
outfileJson.MaxJsonLength=Int32.MaxValue

但是outfileJson没有MasJsonLength属性

所以。。有什么想法吗

编辑6/8/18

两天后,22个视图没有实际响应。我想我的方法一定有问题。我意识到我没有提到我在《邮递员》中执行这些测试,这就是我看到问题的地方。在进一步挖掘之后,我发现了一个似乎与我在《邮递员》中所经历的(挂起的大响应负载)有关的问题。看来邮递员在回复中返回的“行”数是有限制的。GitHub帖子是一个增加行数的特性请求


我不知道现在该如何处理这个问题。因为我在最初的帖子中没有提到邮递员,所以我觉得仅仅回答我自己的问题是不对的。所以,我想我会让它保持原样几天,看看在我这么做之前是否有人插嘴他们的想法。

事实证明,这是邮递员及其当前支持的响应负载大小的问题。如果我没有选择Send,而是选择Send and Download in Postman,它将下载JSON对象并弹出一个对话框,允许我将其保存到本地驱动器。然后,当我检查文件时,我可以看到json对象的格式和传输是正确的

通过在.NET客户端应用程序中执行API调用,我确认这只是一个邮递员问题,而不是.NET HttpResponse问题,该应用程序能够无误地接收Json对象

var outfileJson = JsonConvert.SerializeObject<fileResponseDto>;