2017-04-13 287 views
0

我的控制器需要調用WebAPI方法,該方法將在Content中返回一個帶有pdf文件的HttpResponseMessage對象。我需要立即返回該文件作爲控制器的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。但是這會引發拒絕訪問,等待tsk。

+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

相關問題