.Net MVC возвращает файл - PullRequest
0 голосов
/ 21 марта 2019

Я работаю с контроллером, который будет генерировать / получать файлы. При желании они будут устанавливать заголовки.

   public IActionResult SampleFileReport()
    {

Я вижу, что тип возвращаемого значения - IActionResult (контракт данных). Я вижу внутри функцию, которую я все еще могу установить Response.ContentType

Есть ли предпочтительный шаблон для установки ContentType в контроллере?

Я думаю, что это должно быть частью DataContract, и настройка response.contentype является анти-паттерном, однако я вижу примеры, подобные этому, которые его используют. Возвращение файла для просмотра / загрузки в ASP.NET MVC

Ответы [ 2 ]

2 голосов
/ 21 марта 2019

Все, что вам нужно сделать, это вернуть File:

public IActionResult SampleFileReport()
{
    // do stuff

    return File(bytes, mimetype, filename);
}

File также имеет перегрузки, которые принимают Stream и string (путь и имя файла к файлу в файловой системе) в дополнение к byte[]. mimetype - это тип вашего контента, например, application/pdf, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet (Excel) и т. Д. Последний параметр filename является необязательным. Если он указан, то в ответ отправляется заголовок Content-Disposition: attachment, который предлагает браузеру открыть диалоговое окно загрузки. В противном случае используется значение по умолчанию Content-Disposition: inline, и браузер попытается загрузить возвращаемый файл непосредственно во вкладку / окно браузера, предполагая, что тип mime поддерживается для встроенного рендеринга браузера. Если нет, то вы получите диалог загрузки, независимо от того.

0 голосов
/ 21 марта 2019

Если мы говорим о MVC (не .NET Core), то вы можете изменить IActionResult на FileContentResult

public FileContentResult SampleFileReport() 
{

    byte[] fileBytes = GetFileBytes();
    return File(fileBytes, MediaTypeNames.Application.Octet, "fileName");
}

Только что проверил, что этот класс все еще существует. FileContentResult .NET Core

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