ERR_CONNECTION_RESET 当使用 POST 从 ASP.Net 核心控制器下载 PDF 时

ERR_CONNECTION_RESET when downloading PDF with POST from ASP.Net Core controller

我创建了一个端点,它从 POST 请求中获取 json 正文,使用该数据填写 PDF 的字段,然后将填写好的文件发回。当我尝试使用 Postman 上的“发送和下载”发送 POST 请求时,我最初得到 200 OK 返回,并且 Postman 进入加载状态,显示到目前为止下载花费了多少时间。

大约 2 分钟后,我收到 ECONNRESET 错误:

认为这只是 Postman 的问题,我更新了我的一个 React 项目以达到终点。我原以为发出请求会启动浏览器的内置文件下载功能。相反,我得到了一个类似的错误:ERR_CONNECTION_RESET。

我调试了我的控制器,它似乎正确地解析了请求正文。从端点的函数到 return 似乎也不会花费太长时间。我正在使用 ControllerBase 的 File 方法从文件流中做出响应,我确保不要过早处理文件流。

根据 Ali Vahidinasab 的要求,这里是导出到 C# 的 Postman 请求:

var client = new RestClient("https://localhost:44398/api/charactersheet/download");
            client.Timeout = -1;
            var request = new RestRequest(Method.POST);
            request.AddHeader("Content-Type", "application/json");
            request.AddHeader("Accept", "application/pdf");
            var body = @"{
" + "\n" +
            @"    ""abilityScores"": {
" + "\n" +
            @"        ""strength"": 10,
" + "\n" +
            @"        ""dexterity"": 11,
" + "\n" +
            @"        ""constitution"": 12,
" + "\n" +
            @"        ""intelligence"": 13,
" + "\n" +
            @"        ""wisdom"": 14,
" + "\n" +
            @"        ""charisma"": 15
" + "\n" +
            @"    }
" + "\n" +
            @"}";
            request.AddParameter("application/json", body, ParameterType.RequestBody);
            IRestResponse response = client.Execute(request);
            Console.WriteLine($"Status Code: {response.StatusCode}");

当我运行此客户端代码时,响应的状态代码为0,我理解这意味着没有来自服务器的响应。

我想这个问题的症结在于:这是服务器的问题还是客户端的问题?我能做些什么来解决它?

我发现了问题。它在服务器端。我必须在返回之前将要返回的内存流的位置设置为 0。