Возврат FileContentResult — 2 разных метода контроллера, разные результатыC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Возврат FileContentResult — 2 разных метода контроллера, разные результаты

Сообщение Anonymous »

Я использую ASP.NET Core и ClosedXML для создания экспорта в Excel.
Метод экспорта 1
Вот метод контроллера, который ДЕЙСТВИТЕЛЬНО возвращает браузеру файл .xlsx. Метод вызывается со страницы .cshtml: Это метод контроллера DownloadLoanEventsLog:

Код: Выделить всё

[HttpPost]
public async Task DownloadLoanEventsLog(string id)
{
var user = await _userManager.GetUserAsync(HttpContext.User);
var loan = _unitOfWork.LoanFiles.GetById(id);

var list = eventLogService.GetLoanFileEventLog(id, _unitOfWork, user);
string contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
string fileName = $"Loan-{loan.LoanNumber}-EventsLog.xlsx";

try
{
using (var workbook = new XLWorkbook())
{
IXLWorksheet worksheet = workbook.Worksheets.Add("Events");
worksheet.Cell(1, 1).Value = "EventDate";
worksheet.Cell(1, 2).Value = "LoanNumber";

int index = 2;

foreach (var row in list)
{
worksheet.Cell(index, 1).Value = row.EventDateTimeDisplay;
worksheet.Cell(index, 2).Value = row.LoanNumber;
index++;
}

using (var stream = new MemoryStream())
{
workbook.SaveAs(stream);
var content = stream.ToArray();
return File(content, contentType, fileName);
}
}
}
catch (Exception ex)
{
return RedirectToAction("CloseLoan", new { id = id }).WithWarning("", "Exporting Loan File Events Failed");
}
finally
{
}
}
Метод DownloadLoanEventLog работает отлично. Я быстро получаю в браузер ожидаемый файл Excel.

Метод экспорта 2
Вот метод контроллера, который НЕ возвращает файл .xlsx в браузер.
Метод почти идентичен первому методу, но экспорт запускается в Ajax. вызов для отправки массива данных json на контроллер.

Код: Выделить всё

var rows = $("#report").jqxGrid('getrows');

var loans = [];

for (var i = 0; i < rows.length; i++) {
var row = rows[i];
loans.push({
"loanNumber": row.loanNumber,
"loanType": row.loanType,
});
}

var jqxhr = $.ajax({
data: JSON.stringify(loans),
contentType: "application/json",
url: "/Reports/ExportLoansReport",
type: "POST"
});
Это метод контроллера ExportLoansReport:

Код: Выделить всё

[HttpPost]
public IActionResult ExportLoansReport([FromBody] List model)
{
string contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
string fileName = $"Loans-Export.xlsx";

try
{
using (var workbook = new XLWorkbook())
{
IXLWorksheet worksheet = workbook.Worksheets.Add("Loans");
worksheet.Cell(1, 1).Value = "LoanNumber";
worksheet.Cell(1, 2).Value = "LoanType";

int index = 2;

foreach (var row in model)
{
worksheet.Cell(index, 1).Value = row.LoanNumber;
worksheet.Cell(index, 2).Value = row.LoanType;

index++;
}

using (var stream = new MemoryStream())
{
workbook.SaveAs(stream);
var content = stream.ToArray();
return File(content, contentType, fileName);
}
}
}
catch(Exception ex)
{
return Json("some fail msg");
}
}

Код: Выделить всё

ExportLoansReport
получает действительный объект json в параметре [FromBody], и код вообще не генерирует никаких исключений. После срабатывания return File ничего не происходит, ни один файл не возвращается в браузер.
Я подозреваю, что эта проблема связана с тем, что запрос был сделан со стороны клиента, но я не уверен как это исправить.

Подробнее здесь: https://stackoverflow.com/questions/786 ... ent-result
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Возврат FileContentResult — 2 разных метода контроллера, разные результаты
    Anonymous » » в форуме Jquery
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Данные, отправленные из одного метода контроллера для просмотра, но не из другого метода контроллера
    Anonymous » » в форуме Php
    0 Ответы
    49 Просмотры
    Последнее сообщение Anonymous
  • Почему моя функция Azure возвращает text/plain из FileContentResult?
    Anonymous » » в форуме C#
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Как использовать вызов API, который возвращает FileContentResult программно
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Обработка FileContentResult, когда файл не найден
    Anonymous » » в форуме C#
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»