2016-07-13 7 views
0

AngularJS/ASP.Net WebAPIアプリケーションでは、ボタンをクリックするときにPDFファイルを生成する必要があります。ボタン新しいブラウザのページでは、次のURLにユーザーを再指示しますASP.Net Web API - HTMLの表示とファイルのダウンロード

xyz.com/api/getpdf?Token=f3Ttkwf5XyvvZwcOZpEz

getpdfは、エラーが発生した場合、PDFファイルやHTMLのエラーコードを返すAPIです。

問題は、PDFの生成に最大30秒かかることがあることです。ファイルを送信する前に、ページにいくつかのHTMLを表示するにはどうすればいいですか? HTMLも同じAPI呼び出しで返される必要があります。 1つのリクエストで複数の応答を持つことが可能であることを私は読んだ。。しかし、私はこれをどのようにして行うのですか?

これは、PDFを返すために、コントローラで単純化されたコードです:

[HttpGet] 
public HttpResponseMessage GetPDF(string Token) 
{ 
    HttpResponseMessage resp = null; 
    try 
    {   
     // Generate PDF 
     Byte[] lPDF = GetPDF(Token); 

     // Return PDF in response 
     resp = Request.CreateResponse(HttpStatusCode.OK); 
     resp.Content = new ByteArrayContent(lPDF); 
     resp.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("inline"); 
     resp.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/pdf"); 
     resp.Content.Headers.ContentDisposition.FileName = "PDF-File.pdf"; 
     resp.Content.Headers.ContentLength = lPDF.Length; 

     return resp; 
    } 
    catch (Exception ex) 
    { 
     Toolkit.LogError("GetPDF", ex); 
     return Request.CreateResponse(HttpStatusCode.InternalServerError); 
    } 
} 

答えて

0

あなたは前のページのオーバーレイを作成することができます。

たとえば、コントローラのメソッドを呼び出すボタンがあります。このボタンをクリックすると、オーバーレイに「読み込み中」というメッセージが表示されます。

ドキュメントが生成されると、ページがリダイレクトされ、オーバーレイが消えます。 jQueryのここ

$("#generate").click(function(){ 
 
    $(".overlay").show(); 
 
    setTimeout(function(){window.location.href="http://stackoverflow.com"},2000); 
 
});
.overlay{ 
 
display:none; 
 
position:fixed; 
 
top:0; 
 
left:0; 
 
background-color:rgba(0,0,0,0.5); 
 
width:100%; 
 
height:100%; 
 
color:white; 
 
text-align:center; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div class="overlay">Loading...</div> 
 
<button id="generate">Generate</button>

例setTimeoutメソッドは単に応答の時間をシミュレートするために使用されます。

+0

これはいいですが、特定の間隔で時刻を修正することはできません。5秒かかりますか、30秒かかることがあります。ユーザーがアプリケーションで作業を続けるためには、新しいページに「ファイル待ち」メッセージが必要です。 – navigator

+0

これは単なる例です。ページがリダイレクトされている場合は、hideメソッドを呼び出す必要はありません。ドキュメントを生成するためにajaxメソッドを使用している場合は、それを呼び出すだけです。ここでは、(settimeoutの)応答時間を30秒に変更することができます... – Alexis

0

あなたが正しく理解している場合は、2段階でpdfファイルを生成することができます。 最初のステップは、Webサーバーにpdfファイルを生成するように要求することです。 (POSTリクエスト) 2番目のステップは、pdfファイルがすでに生成されているかどうかWebサーバーに問い合わせることです。 (GETリクエストまたはSignalR)

+0

はい、それは簡単ですが、私が望んでいたのは1回のリクエストでそれを行うことでした。 – navigator

関連する問題