#c# #excel #asp.net-core #export
#c# #excel #asp.net-core #экспорт
Вопрос:
Я хочу создать сервис, который будет генерировать таблицу Excel из моей хранимой процедуры. Я ищуhttps://www.talkingdotnet.com/import-export-excel-asp-net-core-2-razor-pages / где это работает непосредственно для страницы razor, но мне нужно создать сервис (на моем бизнес-уровне и предоставить его контроллеру).
Я столкнулся с проблемой, что в этом руководстве это возврат IActionResult
из функции:
public async Task<IActionResult> OnPostExport()
{
//logic
return File(memory, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", sFileName);
}
Пожалуйста, смотрите https://www.talkingdotnet.com/import-export-excel-asp-net-core-2-razor-pages / для получения подробной информации о режиме.
Я пытался написать этот код:
public class ExportService
{
private IHostingEnvironment _hostingEnvironment;
public ExportService(IHostingEnvironment hostingEnvironment)
{
_hostingEnvironment = hostingEnvironment;
}
public async Task OnPostExport(int year)
{
//logic
return File(memory, "application/vnd.openxmlformats-
officedocument.spreadsheetml.sheet", sFileName);
}
Это не работает, потому что «return File» — функционал из PageModel, как это работает в руководстве. Я хочу вернуть файл контроллеру из моей службы. Какой тип я должен вернуть из своей OnPostExport
функции? Я буду благодарен за любую информацию и идеи, которые мне нужно сделать.
Комментарии:
1. Я думаю, что вы ищете
byte[]
. Вы можете сохранить файл EPPlus в массив байтов вместо фактического файла с помощьюMemoryStream
, а затем вернуть этот массив байтов.
Ответ №1:
Для File
это базовый метод, из ControllerBase
которого будет возвращен FileContentResult
результат. Если вы предпочитаете использовать File
, вы могли бы реализовать код из вариантов FileResult.
ИМО, я бы посоветовал вам вернуться byte[]
из public async Task OnPostExport(int year)
, а затем сконструировать ответ File
следующим образом
public async Task<byte[]> OnPostExport(int year)
{
//logic
return filebytearray;
}
var dt = await _exportService.OnPostExport(1);
return File(dt, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", sFileName);