/ / Kontroler MVC, pobierz plik z WebAPI i zwróć jako FileResult - asp.net-mvc, file, download, asp.net-web-api2, fileresult

Kontroler MVC, pobierz plik z WebAPI i zwróć jako FileResult - asp.net-mvc, file, download, asp.net-web-api2, fileresult

Mój kontroler musi wywołać metodę WebAPI, którazwróci obiekt HttpResponseMessage z plikiem pdf w treści. Muszę natychmiast zwrócić ten plik jako obiekt FileResult z kontrolera. Eksperymentowałem z kilkoma rozwiązaniami złożonymi z kodu znalezionego dookoła, ale wydaje mi się, że wszystkie metody zapisu plików jako async i mam problemy z odesłaniem pliku jako FileResult natychmiast w tej samej metodzie kontrolera. Jakie jest najlepsze podejście w tym scenariuszu?

Jakiś kod próbowałem:

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);

To był mój główny pomysł, pobierz plik z treści odpowiedzi i zwróć go jako FileResult. Ale to powoduje odrzucenie dostępu w oczekiwaniu na tsk.

Odpowiedzi:

3 dla odpowiedzi № 1

Nie musisz zapisywać pliku na dysku jako pliku, możesz po prostu zająć się takim strumieniem:

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");
}
}

Mam nadzieję, że pomaga!