Как открыть файл PDF с помощью контроллера? Asp. net MVC - PullRequest
0 голосов
/ 15 марта 2020

Я пытаюсь открыть файл PDF, расположенный в папке (Content / extras) в моем приложении, используя контроллер, и он не работает для меня. Я получаю сообщение об ошибке:

"Не удалось найти файл 'C: /..../ Content / extras / PDFName'" Сведения об исключении: System.IO.FileNotFoundException: не удалось find file 'C: /..../ Content / extras / PDFName' "

Таким образом, в основном говорится, что он не может найти файл, но файл находится на 100% в этом месте и имя верное. Однако я замечаю, что он пытается найти «PDFName» вместо «PDFName.pdf», так что, возможно, именно это не так, и это «MimeMapping» в контроллере, который не закодирован правильно.

Вот мой код:

Контроллер

public FileResult PDFFlyer()
{
    string path = Server.MapPath(String.Format("~/Content/extras/PDFName"));

    string mime = MimeMapping.GetMimeMapping(path);

    return File(path, mime);
}

RouteConfig

    routes.MapRoute(
        name: "PDFFlyer",
        url: "{filename}",
        defaults: new { controller = "PDF", action = "PDFFlyer", filename = 
        UrlParameter.Optional }
    );

Файл CS html

<a class="dropdown-item" href="@Url.Action("PDFFlyer", "PDF")" target="_blank">PDF Flyer</a>

Что я что-то не так? Опять же, я предполагаю, что код контроллера «MimeMapping» неверен, потому что он, похоже, не ищет «.pdf». и только ищет PDFName, но не совсем уверен, что не так. Есть предложения? Спасибо.

1 Ответ

1 голос
/ 16 марта 2020

Я наконец понял это. Мне просто нужно было добавить расширение .pdf в PDFName в переменной 'path'. Путаница была вызвана тем, что я думал, что «путь» - это только путь только с PDFName, а не с расширением .pdf, и тогда у «mime» будет расширение «.pdf». Но нет, у 'path' должен быть полный путь, в котором файл включает в себя расширение .pdf, и тогда переменная 'mime', как я понимаю, только для идентификации типа файла.

Итак, контроллер, который является единственным, что я изменил для его работы, выглядит следующим образом:

public FileResult PDFFlyer()
{
    //include the .pdf extention at the end
    string path = Server.MapPath(String.Format("~/Content/extras/PDFName.pdf")); 

    string mime = MimeMapping.GetMimeMapping(path);

    return File(path, mime);
}

Единственное, что не работает правильно, это URL-адрес маршрута, но это для другого вопроса в другой теме. Но, по крайней мере, файл PDF показывает правильно, что и было целью этого вопроса.

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