2017-04-13 1 views
0

내 컨트롤러는 Content에 PDF 파일이있는 HttpResponseMessage 개체를 반환하는 WebAPI 메서드를 호출해야합니다. 이 파일을 컨트롤러에서 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

그리고 나는 그것을 너무 복잡하게 만들고 있었다! Adrien 감사합니다! – elector

관련 문제