Я работаю над проектом 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 должен вернуть значение.
Кто-нибудь знает, как это исправить?