вернуть файл асинхронным в MVC - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь запустить процессор, интенсивно использующий данные / данные, для асинхронного возврата файла, но он работает синхронно.Я бы хотел, чтобы пользователь мог продолжать пользоваться сайтом во время обработки файла.Это достижимо?Вот что у меня работает, но синхронно:

[HttpGet]
    public async Task<ActionResult> GetSignUpReportForCsv(ReportFilterInput input)
    {
        reportDb = new ReportDb(DbSession, CommunityRouteInfo);
        var model = new SignupReportView();
        try
        {
            model = await reportDb.GetSignUpReportForCsv(input);
            return File(model.FileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, model.Filename);
        }
        catch(Exception ex)
        {

        }
        TempData["Message"] = "The file is being processed and the save dialog will appear when it is ready";
        return RedirectToAction("ReportingHome", "Report");
    }

1 Ответ

0 голосов
/ 19 февраля 2019

Даже если вы используете async / await, метод не позволяет возврату метода до завершения файла.Он просто позволяет вашему коду выполнять части после ожидания, прежде чем «вернуться к нему».

Вы можете сделать асинхронный AJAX-вызов с вашего сайта, но тогда пользователь не сможет его покинуть, если вы этого не сделаетеиметь одностраничное приложение.

Лучше открыть всплывающее окно, которое выполнит загрузку и сохранит пользователя на сайте.Пока открыто всплывающее окно, пользователь в конечном итоге получит файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...