Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试从WebApi下载文件时,任务被取消_C#_Asp.net_.net_Asp.net Web Api_Asp.net Web Api2 - Fatal编程技术网

C# 尝试从WebApi下载文件时,任务被取消

C# 尝试从WebApi下载文件时,任务被取消,c#,asp.net,.net,asp.net-web-api,asp.net-web-api2,C#,Asp.net,.net,Asp.net Web Api,Asp.net Web Api2,当我试图从Web API下载zip文件时,出现错误“任务被取消”。我做错了什么 描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源 异常详细信息:System.Threading.Tasks.TaskCanceledException:任务已取消 我在尝试下载调用API的Excel文件时遇到此错误。我没有在这个方法上实现ATP,所以一开始很混乱。这是我最初的代码: public IHttpActionResult Get([FromUri]

当我试图从Web API下载zip文件时,出现错误“任务被取消”。我做错了什么

描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源

异常详细信息:System.Threading.Tasks.TaskCanceledException:任务已取消


我在尝试下载调用API的Excel文件时遇到此错误。我没有在这个方法上实现ATP,所以一开始很混乱。这是我最初的代码:

public IHttpActionResult Get([FromUri] string id, [FromUri] SurveyReportRequestType requestType) {
    byte[] excelData = System.Text.Encoding.UTF8.GetBytes("Boobs out!");
    HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
    using (var stream = new MemoryStream(excelData))
    {
        result.Content = new StreamContent(stream);
        result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
        result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
        {
            FileName = "Data.xls"
        };
    }
    return ResponseMessage(result);
}
经过思考和做出一些改变后,出现了以下情况:


如您所见,我使用语句将流封装在一个中。这导致请求无法完成,因为内容不可用于响应

创建zip存档需要多少时间?可能是因为超时而取消了任务。为什么在该任务中调用“stream.Close()”?它应该在块结束时自动关闭。为什么在设置响应内容后立即调用ms.Dispose()?简而言之:不要在控制器中处理内容流。WebAPI将处理它。
public IHttpActionResult Get([FromUri] string id, [FromUri] SurveyReportRequestType requestType) {
    byte[] excelData = System.Text.Encoding.UTF8.GetBytes("Boobs out!");
    HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
    using (var stream = new MemoryStream(excelData))
    {
        result.Content = new StreamContent(stream);
        result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
        result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
        {
            FileName = "Data.xls"
        };
    }
    return ResponseMessage(result);
}
byte[] excelData = System.Text.Encoding.UTF8.GetBytes("Boobs aout!");

HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
var stream = new MemoryStream(excelData);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
    FileName = "Data.xls"
};
return ResponseMessage(result);