我的WebApi 2控制器中有以下方法

[Route("document/{documentGuid:Guid}/basic")]
[DocumentName("label")]
[HttpGet]
public async Task<HttpResponseMessage> BasicDocument(Guid documentGuid)
{
    byte[] data = await _documentsGenerator.CreateDocument(documentGuid);
    HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
    result.Content = new ByteArrayContent(data);
    result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
    result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
    {
        FileName = string.Format("document-{0}-basic.pdf", documentGuid)
    };
    return result;
}


当我从浏览器调用它下载文件时,我得到了文件,但该请求仍在IIS worker列表中挂起:

c# - Web Api中的异步方法导致IIS ExecuteRequestHandler挂起-LMLPHP

如果我从方法中删除了异步/等待代码,一切都会正常。我执行哪种异步操作也无关紧要。只要使用await SomeMethod()ExecuteRequestHandler就会挂起。可能是什么原因?

最佳答案

造成这种情况的最可能原因是某些运行时未在.NET 4.5(或更高版本)中运行。

请确保:


您的应用程序面向.NET 4.5或更高版本。
您的应用程序在其httpRuntime.targetFramework中将属性web.config设置为适当的值(例如4.5)。

10-05 18:59
查看更多