Ошибка при экспорте файла CSV из ASP. Net MVC - PullRequest
0 голосов
/ 27 марта 2020

Я работаю над проектом MVC, где мне нужно экспортировать некоторые данные в формат CSV. Я создал следующий метод:

    [HttpGet]
    public async Task<ActionResult> ExportData(int jobId)
    {
        var dataToExport = await ...queryToTheRepository
            .ToListAsync();

        var dataList= new List<MyDataViewModel>();
        foreach (var item in dataToExport)
        {
            var data= new RecipientViewModel() { 
                Id = item.Id,
                FirstName = item.FirstName,
                LastName = item.LastName,
                Email = item.Email,
            };

            dataList.Add(data);
        }

        exportAsCSV(dataList);

        return View();
    }

Метод экспорта:

    private void exportAsCSV(List<MyDataViewModel> dataToExport)
    {
        var sw = new StringWriter();
        //write the header
        sw.WriteLine(String.Format("Id, First Name, Last Name, Email"));

        //write every recipient to the file
        foreach (var record in dataToExport)
        {
            sw.WriteLine(String.Format("{0},{1},{2},{3}", record.Id, record.FirstName, record.LastName, record.Email));
        }

        Response.Clear();
        Response.AddHeader("Content-Disposition", "attachment; filename=adressenbestand.csv");
        Response.ContentType = "text/csv";
        Response.Write(sw);
        Response.End();
    }

Функциональность экспорта работает хорошо. Однако я получаю эту ошибку из Visual Studio:

Complete StackTrace System.Web.HttpException: 'Сервер не может установить состояние после отправки заголовков HTTP.'

Это исключение было первоначально сгенерировано в стеке вызовов: System.Web.HttpResponse.StatusCode.set (int) System.Web.HttpResponseWrapper.StatusCode.set (int) System.Web. Mvc .HandleErrorAttribute. OnException (System.Web. Mvc .ExceptionContext). System.Web. Mvc .ControllerContext, System.Collections.Generi c .IList, System.Exception) System.Web. Mvc .Asyn c .AsyncControllerActionInvoker.BeginInvokeAction.AnonymousMethod__1 (System.IAsync). Web. Mvc .Asyn c .AsyncResultWrapper.WrappedAsyncResult.CallEndDelegate (System.IAsyncResult) System.Web. Mvc .Asyn c .AsyncRes ultWrapper.WrappedAsyncResultBase.End () System.Web. Mvc .Asyn c .AsyncControllerActionInvoker.EndInvokeAction (System.IAsyncResult) System.Web. Mvc .Controller.BeginExecuteCore. Mvc .Controller.ExecuteCoreState) ...

Я предполагаю, что return View () не должен быть там после того, как метод экспорта отправил ответ. Но если я удаляю возврат, я получаю ошибку компиляции, что метод ExportData должен вернуть значение.

Кто-нибудь знает, как это исправить?

...