Контроллер DotNet возвращает статический файл - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь сказать контроллеру вернуть статический файл в каком-то состоянии. Я пробовал много способов «Server.MapPath» не работает для меня, поэтому мне нужна альтернатива. я пробовал следующее, но я получаю ошибку:

return File(Url.Content(startupPath), "text/javascript");

ошибка:

InvalidOperationException: No file provider has been configured to process the supplied file.
Microsoft.AspNetCore.Mvc.Infrastructure.VirtualFileResultExecutor.GetFileInformation(VirtualFileResult result)

У меня есть app.UseStaticFiles () и app.UseSpaStaticFiles ();оба установлены.

1 Ответ

0 голосов
/ 01 октября 2019

Наличие у контроллера возврата файла - это нечто иное, чем включение статических файлов или статических файлов spa.

Статические файлы:

Из Статических файлов в ASP.NET Core :

Статические файлы хранятся в корневом веб-каталоге проекта. Каталог по умолчанию / wwwroot. (...) Веб-хост приложения должен быть осведомлен о корневом каталоге содержимого. (...) Статические файлы доступны через путь относительно корня сети. (...) Формат URI для доступа к файлу в подпапке: http: ///subfolder/.

, с помощью app.UseStaticFiles() любой сможет получать файлы из вашего каталога wwwroot.

Это может удовлетворить ваши условия. Если это не так, потому что вы можете добавить аутентификацию для получения файла или вернуть другой файл по тому же маршруту на основе параметра запроса или текущего пользователя, или вам нужно сгенерировать файл, вам нужно вернуть файл из acontroller.

Возврат файла из контроллера:

документации по Microsoft не много, но есть много вопросов и ответов по stackoverflow.

Checkout:


public ActionResult DownloadFile()
{
    string filename = "File.pdf";
    string filepath = AppDomain.CurrentDomain.BaseDirectory + "/Path/To/File/" + filename;
    byte[] filedata = System.IO.File.ReadAllBytes(filepath);
    string contentType = MimeMapping.GetMimeMapping(filepath);

   var cd = new System.Net.Mime.ContentDisposition
    {
        FileName = filename,
        Inline = true,
    };

    Response.AppendHeader("Content-Disposition", cd.ToString());

    return File(filedata, contentType);
}

Одной из ваших проблем также является поиск файла, который вы хотите вернуть. Вы можете использовать Server.MapPath("~/filename.ext") для этого. Убедитесь, что ваш файл включен в ваш скомпилированный проект, выбрав «Копировать, если новее» или «Копировать всегда» в его свойствах в «Копировать в выходной каталог».

enter image description here

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