2017-04-13 1 views
0

私のコントローラはWebAPIメソッドを呼び出す必要があり、WebAPIメソッドを呼び出す必要があります.HttpResponseMessageオブジェクトにはContentのpdfファイルが返されます。このファイルをコントローラからFileResultオブジェクトとしてすぐに返す必要があります。 私はいくつものコードをまとめて実験していましたが、すべてのファイル保存メソッドが非同期であると思われ、同じコントローラメソッドでファイルをFileResultとして返す問題が発生しました。 このシナリオではどのような方法が最適ですか?MVCコントローラ、WebAPIからファイルを取得し、FileResultとして返します。

私が試してみましたいくつかのコード:

System.Threading.Tasks.Task tsk = response.Content.ReadAsFileAsync(localPath, true).ContinueWith(
        (readTask) => 
        { 
         Process process = new Process(); 
         process.StartInfo.FileName = localPath; 
         process.Start(); 
        }); 
       await tsk; 

       return File(localPath, "application/octetstream", fileName); 

これは、応答内容からファイルを取得し、FileResultとしてそれを返し、私の主なアイデアでした。しかし、これはアクセスが拒否されるのを待ちます。

+1

既に使用しようとしているコードを共有できますか? – Alisson

+0

それは混乱しています。私は何を追加するのか分かりません...いくつかのコードを追加します。 – elector

答えて

3

あなたはファイルとしてディスクにファイルを保存する必要はありません、あなたは、単にこのようなストリームを扱うことができます役立ちます

public async Task<FileResult> GetFile() 
{ 
    using (var client = new HttpClient()) 
    { 
     var response = await client.GetAsync("https://www-asp.azureedge.net/v-2017-03-27-001/images/ui/asplogo-square.png"); 
     var contentStream = await response.Content.ReadAsStreamAsync(); 

     return this.File(contentStream, "application/png", "MyFile.png"); 
    } 
} 

希望を!

+0

そして私はそれをとても複雑にしていました!ありがとう、アドリアン! – elector

関連する問題