2017-02-15 143 views
2

我在我的ASP.NET项目中下载了代码功能,下载代码如下所示。下载文件 - 防止第二次下载,直到第一次完成

public class Download : IHttpHandler 
{  
    private void DownloadPsListingProduct(Guid which) 
    { 
     string path = GetFilePathFromGuid(which); 

     FileInfo file = new FileInfo(path); 
     HttpResponse response = HttpContext.Current.Response;   
     response.ClearContent(); 
     response.Clear(); 

     response.ContentType = "application/octet-stream";   
     response.AddHeader("Content-Disposition", 
          "attachment;filename=\"" + file.Name.NeutralizationCrlfSequences() + "\";"); 

     response.TransmitFile(file.FullName); 
     response.Flush(); 
     response.End(); 

    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 
} 

当我一次下载单个文件时,此代码就像一个魅力。 但是,在一个文件正在下载的过程中,请求下载其他文件时,首先等待第一个文件下载完成,然后第二个文件下载开始。

注意:我发送新的请求来下载每个文件。

我想避免这种单个文件的下载行为,用户应该能够下载文件而无需等待以前的文件完成。

+1

您是否希望*一次一个文件的行为,还是您试图避免它? –

+0

@TomasLycken我试图避免它。 – imlim

+0

如果您的处理程序被标记为需要会话状态,但我认为这种行为有点期待,但在这里似乎不是这种情况。这是真正的代码吗? –

回答

0

ASP.NET Web API 2应该能够以很少的仪式来处理这个问题。这里有一个例子here,但我会再次重申的重要组成部分:

public class FilesController : ApiController 
{ 
    public IHttpActionResult(Guid fileId) 
    { 
     var filePath = GetFilePathFromGuid(fileId); 
     var fileName = Path.GetFileName(filePath); 
     var mimeType = MimeMapping.GetMimeMappting(fileName); 
     return OkFileDownloadResult(filePath, mimeType, fileName, this); 
    } 
} 

当然,在的ASP.NET Web API 2挂钩路由等是挂钩的IHttpHandler很大的不同,但也有一个互联网上的大量例子(包括在这里)就如何开始。

+0

我有ASP.NET项目。我是否必须创建单独的Web API项目?或者我可以在同一个ASP.NET网站使用urlrewrite做什么? – imlim

+0

@imlim你应该可以毫无问题地将Web API控制器添加到你的网站项目中。看看文档 - 这里有很多指南:https://www.asp.net/mvc –