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。
我创建了一个端点,它从 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。