ASP.Net MVC вернуть файл в виде вложения из внешнего API - PullRequest
0 голосов
/ 16 октября 2019

У меня есть конечная точка API, которая возвращает файл в виде вложения. например, если я захожу на сайт www.myfileservice.com/api/files/download/123, я могу загрузить файл напрямую. Мое требование - использовать эту конечную точку в другом проекте ASP.Net MVC. Поэтому, если пользователь нажимает www.mymvcapplication.com/File/DownloadDocument/123, он также должен загрузить тот же файл. Внутренне метод действия должен вызвать API файловой службы и вернуть результат как есть. Это код, который я использую:

FileController.cs:

public HttpResponseMessage DownloadDocument(int Id)
{
    return new DocumentClient().DownloadDocument(Id);
}

DocumentClient.cs:

public class DocumentClient
{
    private string documentServiceURL = string.Empty;
    private static string downloadDocumentUri = "api/files/download/";

    protected HttpClient documentClient = null;

    public DocumentClient()
    {
        documentServiceURL = "www.myfileservice.com";
        documentClient = new HttpClient();
        documentClient.BaseAddress = new Uri(documentServiceURL);
    }

    public HttpResponseMessage DownloadDocument(int Id)
    {
        return documentClient.GetAsync(String.Format("{0}/{1}", downloadDocumentUri, Id)).Result;
    }
}

Приведенный выше код не дает никаких ошибок, но толькопечать ответа в окне браузера (Content-Length, Content-Disposition и т. д.). Мне нужно скачать файл вместо этого.

1 Ответ

0 голосов
/ 16 октября 2019

Я думаю, что лучше всего вернуть FileResult с вашего контроллера:

public FileResult DownloadDocument(int Id)
{
    var document = new DocumentClient().DownloadDocument(Id);
    //do the transformation here
    //...
    //I don't know what is your file's extension, please replace "application/zip" if 
    //needed
    return File(finalResult, "application/zip", fileName);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...