2017-02-15 10 views
2

私はASP.NETプロジェクトでコード機能をダウンロードしており、ダウンロードコードは以下のようになっています。ファイルをダウンロード - 最初に完了するまで2回目のダウンロードを防止します

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つのファイルをダウンロードすると魅力的です。 1つのファイルがダウンロード中で、他のファイルのダウンロードを要求すると、まず最初のファイルのダウンロードが完了するのを待ってから、2回目のファイルのダウンロードが開始されます。

注:各ファイルのダウンロードを新たにリクエストしています。

私はこの1つのファイルのダウンロード動作を避けたいと思います。ユーザーは前のファイルを待たずにファイルをダウンロードできるはずです。

+1

* 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をフックとは全く異なるが、またありますそれをどうやって始めるべきか、インターネット上の多くの例題(ここではSOを含む)。

+0

私はASP.NETプロジェクトを持っています。別のWeb APIプロジェクトを作成する必要がありますか?または、urlrewriteを使用して同じASP.NET Webサイトで行うことはできますか? – imlim

+0

@imlim Web APIコントローラーを問題なくウェブサイトプロジェクトに追加することができるはずです。ドキュメンテーションを見てください - そこに多くのガイドがあります:https://www.asp.net/mvc –

関連する問題